日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

经典算法学习——冒泡排序

發(fā)布時(shí)間:2025/7/14 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 经典算法学习——冒泡排序 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ? ? 冒泡排序是我們學(xué)習(xí)的第一種排序算法。應(yīng)該也算是最簡(jiǎn)單、最經(jīng)常使用的排序算法了。

無(wú)論怎么說(shuō)。學(xué)會(huì)它是必定的。

今天我們就用C語(yǔ)言來(lái)實(shí)現(xiàn)該算法。

演示樣例代碼已經(jīng)上傳至:https://github.com/chenyufeng1991/BubbleSort

算法描寫敘述例如以下:

(1)比較相鄰的前后兩個(gè)數(shù)據(jù)。假設(shè)前面數(shù)據(jù)大于后面的數(shù)據(jù),就將兩個(gè)數(shù)據(jù)交換;

(2)這樣對(duì)數(shù)組的第0個(gè)數(shù)據(jù)到N-1個(gè)數(shù)據(jù)進(jìn)行一次遍歷后。最大的一個(gè)數(shù)據(jù)就到了最后一個(gè)位置,也就是下標(biāo)為N-1的位置(沉到了水底)。

(3)N = N-1,假設(shè)N不為0就反復(fù)(1)(2)兩步,否則排序完畢。也就是對(duì)數(shù)組的第0個(gè)數(shù)據(jù)到N-2個(gè)數(shù)據(jù)再次進(jìn)行遍歷;


完整的代碼實(shí)現(xiàn)例如以下:

// // main.c // BubbleSort // // Created by chenyufeng on 16/1/28. // Copyright ? 2016年 chenyufengweb. All rights reserved. //#include <stdio.h>typedef int BOOL; #define true 1 #define false 0int *bubbleSort01(int arr[],int len); void bubbleSort03(int arr[],int len);int main(int argc, const char * argv[]) {int array[7] = {150,111,1000,99,300,10,189};/***指針向后移位;*/// int *p = bubbleSort02(array, 7);//// for (int i = 0; i < 7; i++) {// printf("%d ",*(p+i));// }/*** 能夠使用傳引用的方式,實(shí)現(xiàn)例如以下;這里不須要返回值,直接打印就可以,推薦使用這樣的方式,方便。*/bubbleSort04(array, 7);for (int i = 0; i < 7; i++) {printf("%d ",array[i]);}return 0; }//常規(guī)的冒泡; int *bubbleSort01(int arr[],int len){int temp;for (int i = 0; i < len; i++){for (int j = 1; j < len - i; j++) {if (arr[j - 1] > arr[j]) {temp = arr[j - 1];arr[j - 1] = arr[j];arr[j] = temp;}}}return arr; }//常規(guī)的冒泡,不須要返回值。 void bubbleSort03(int *arr,int len){int temp;for (int i = 0; i < len; i++){for (int j = 1; j < len - i; j++) {if (arr[j - 1] > arr[j]) {temp = arr[j - 1];arr[j - 1] = arr[j];arr[j] = temp;}}} }


當(dāng)然也能夠把上面的交換元素的代碼抽取出來(lái)。寫成一個(gè)交換函數(shù)swap。

代碼實(shí)現(xiàn)例如以下:

// // main.c // BubbleSort // // Created by chenyufeng on 16/1/28. // Copyright ? 2016年 chenyufengweb. All rights reserved. //#include <stdio.h>typedef int BOOL; #define true 1 #define false 0int *bubbleSort01(int arr[],int len); void swap(int *a,int *b);int main(int argc, const char * argv[]) {int array[7] = {150,111,1000,99,300,10,189};/***指針向后移位;*/// int *p = bubbleSort02(array, 7);//// for (int i = 0; i < 7; i++) {// printf("%d ",*(p+i));// }/*** 能夠使用傳引用的方式。實(shí)現(xiàn)例如以下;這里不須要返回值。直接打印就可以,推薦使用這樣的方式,方便;*/bubbleSort01(array, 7);for (int i = 0; i < 7; i++) {printf("%d ",array[i]);}return 0; }//常規(guī)的冒泡。 int *bubbleSort01(int arr[],int len){int temp;for (int i = 0; i < len; i++){for (int j = 1; j < len - i; j++) {if (arr[j - 1] > arr[j]) {// temp = arr[j - 1]; // arr[j - 1] = arr[j]; // arr[j] = temp;//這里也能夠使用swap交換函數(shù);swap(&arr[j - 1], &arr[j]);}}}return arr; }void swap(int *a,int *b){int temp;temp = *a;*a = *b;*b = temp; }



交換類排序:借助數(shù)據(jù)元素之間的相互交換進(jìn)行排序的一種方法。如冒泡排序、高速排序。

插入類排序:將無(wú)序的各個(gè)元素依次插入到已經(jīng)有序的線性表中。如直接插入排序、希爾排序。

選擇排序:掃描整個(gè)線性表,選出最小的元素。將它交換到表的最前面。然后對(duì)剩下的繼續(xù)相同的方法,直到子表為空。如直接選擇排序、堆排序。



? ? ?說(shuō)明下,冒泡排序的時(shí)間復(fù)雜度為O(n^2),空間復(fù)雜度為O(1).是一種穩(wěn)定的排序。



本文參考:http://blog.csdn.net/morewindows/article/details/6657829

總結(jié)

以上是生活随笔為你收集整理的经典算法学习——冒泡排序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。