氣泡排序(Bubble Sort)

2021-08-19 18:32:36 字數 2222 閱讀 1534

插入、氣泡排序的速度較慢,但參加排序的序列區域性或整體有序時,這種排序能達到較快的速度。

反而在這種情況下,快速排序慢了。

當n較小時,對穩定性不作要求時宜用選擇排序,對穩定性有要求時宜用插入或氣泡排序。

若待排序的記錄的關鍵字在乙個明顯有限範圍內時,且空間允許時用桶排序。

當n較大時,關鍵字元素比較隨機,對穩定性沒要求宜用快速排序。

當n較大時,關鍵字元素可能出現本身是有序的,對穩定性有要求時,空間允許的情況下宜用歸併排序。

當n較大時,關鍵字元素可能出現本身是有序的,對穩定性沒有要求時宜用堆排序。

1.氣泡排序(bubble sort)

好的,開始總結第乙個排序演算法,氣泡排序。我想對於它每個學過c語言的都會了解的吧,這可能是很多人接觸的第乙個排序演算法。

(1)演算法描述:氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端。

(2)演算法描述和實現   具體演算法描述如下:

<1>.比較相鄰的元素。如果第乙個比第二個大,就交換它們兩個;

<2>.對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對,這樣在最後的元素應該會是最大的數;

<3>.針對所有的元素重複以上的步驟,除了最後乙個;

<4>.重複步驟1~3,直到排序完成。

(3)演算法分析;最佳情況:t(n) = o(n)  當輸入的資料已經是正序時(都已經是正序了,為毛何必還排序呢....)

最差情況:t(n) = o(n2)  當輸入的資料是反序時(臥槽,我直接反序不就完了....)   平均情況:t(n) = o(n2)

#include

//氣泡排序演算法

void bubblesort(int *arr, int n) ;

int n = sizeof(arr) / sizeof(int);

bubblesort(arr, n);

printf("排序後的陣列為:

\n");

for (int j = 0; jprintf("%d ", arr[j]);

printf("\n");

return 0;

氣泡排序改進1,新增標誌位,如果某一次排序中出現沒有交換位置,說明排序完成

void maopao(int a,int n)

if(flag==0)

break;}}

int main()

//氣泡排序改進

2,新增標誌位,記錄最後一次交換位置的地方,證明最後一次交換位置之後的地方時排好序的,下一次只需要排最後一次之前的地方就好了

void maopao(int a,int n)

flag=pos;

}

}

int main()

冒泡改進3,傳統冒泡每趟排序遍歷一次找到乙個最大值或者最小值,如果每趟遍歷兩次就會找打乙個最大值和乙個最小值,減少了一半的排序趟數

void maopao( int r, int n)   

--high;                 //修改

high值,

前移一位  

for ( j=high; j>low; --j) //反向冒泡

,找到最小者  

if (r[j]

++low;                  //修改

low值

,後移一位  

}   

}int main()

氣泡排序 bubble sort

氣泡排序是最基本的排序演算法,常被做為內部排序的第乙個排序演算法進行講解。它的原理非常簡單,只是一 個兩層迴圈,每次將最大或最小的放到陣列最後。演算法如下 b為陣列的起始位置,e為陣列的結果位置 int bubble int data,int b,int e return n 這個函式返回兩個整數比...

氣泡排序(Bubble Sort)

無論你學習哪種程式語言,在學到迴圈和陣列時,通常都會介紹一種排序演算法來作為例子,而這個演算法一般就是氣泡排序。並不是它的名稱很好聽,而是說這個演算法的思路最簡單,最容易理解。因此,哪怕大家可能都已經學過氣泡排序了,我們還是從這個演算法開始我們的排序之旅。氣泡排序 bubble sort 一種交換排...

氣泡排序 Bubble Sort

維基百科 氣泡排序 演算法思想 不斷的交換相鄰的兩個反序元素,使最小元素 上浮 或使最大元素 下沉 每一趟 冒泡 都會確定乙個最大的元素或最小的元素,同選擇排序類似,演算法總共只需進行n 1趟。將乙個陣列豎著放,低位址在上面,高位址在下面,所謂 上浮 就是較小的元素不斷向低位址靠近,所謂 下沉 就是...