八大排序之氣泡排序

2022-06-10 20:27:08 字數 2085 閱讀 9318

/*八種排序之氣泡排序*/

//氣泡排序的原理是:從左到右,相鄰元素進行比較。每次比較一輪,

//就會找到序列中最大的乙個或最小的乙個。這個數就會從序列的最右邊冒出來。

/*  1. 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。

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

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

4. 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。*/

/*雙向鍊錶過程:

1、從儲存n個待排序元素的表尾開始,並令j=n;

2、若j<2,則排序結束;

3、從第乙個元素開始進行兩兩比較,令i=1;

4、若i>=j,則一趟氣泡排序結束,j=j-1;待排序表的記錄數-1,轉step2;

5、比較array[i].key與array[i+1].key,若array[i].key<=array[i+1].key,則不交換,轉step7;

6、array[i].key>array[i+1].key,將array[i].key於array[i+1].key交換;

7、i = i+1,轉step4繼續比較

*/

//問題1、i為什麼從1開始

/*一共只需排n-1趟,最小的數字在最左邊,不用排序;

*///問題2、為什麼只排序了n-1趟

/*氣泡排序每趟需要將最大的數移動到最右邊,

(以max+下標表示這個數的大小排名,如最大的為max1)

第一趟將數max1移動到底n-0個數的位置,

第二趟將數max2移動到第n-1個數的位置

第三趟將數max3移動到第n-2個數的位置

....

第n-1趟將數max(n-1)移動到第n-((n-1)-1))==2個位置,

此時僅剩下最小的數排在第乙個位置,所以不用再排序了

即一共排序了n-1趟;

*///問題3、j為什麼小於n-i

/*第i趟將數maxi排在第n-(i-1)個位置上,而從第n-(i-1)往後

的數字都已經排好序了,

即後面的數字無需再排

*/#include

#define n 8

void bubblesort(int array[n])

}printf("第%d趟排序", i);

for (int a = 0; a < n; a++)

printf("\n");}}

int main()

printf("排序前");

for (int i = 0; i < n; i++)

printf("\n");

bubblesort(array);

printf("排序後\n");

for (int i = 0; i < n; i++)

return 0;

}

1 //例項:2//

1,排序問題3//

時間限制 : 1sec 記憶體限制 : 128mb4//

題目描述5//

將四個整數進行從小到大的順序排列,6//

7//輸入8

//四個整數9//

10//

輸出11

//從小到大輸出這四個數

12//

13//

樣例輸入

14//

5 3 4 2

15//

樣例輸出

16//

2 3 4 5

1718 #include 19

#define n 4

20void bubblesort(int

array[n]) 30}

31}32for (int i = 0; i < n; i++)

3336}37

void

main()

43bubblesort(array);

44 }

氣泡排序的核心部分是雙重巢狀迴圈,氣泡排序的時間複雜度是o(n2),時間複雜度較高,但程式理解難度相對較簡單,並不推薦使用氣泡排序;

八大排序之氣泡排序

氣泡排序,穩定,平均與最壞時間複雜度為o n 2 最好為o n 空間複雜度為o 1 include using namespace std void bubblesort int numbers,const int length int main int length 0 cin length fo...

八大排序之氣泡排序

1 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。2 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。3 針對所有的元素重複以上的步驟,除了最後乙個。4 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。1.不管原始陣列是否...

八大排序之氣泡排序

思路 冒泡,即為在每次排序時,將此時陣列內最大的數移到此時的最後一位。第一步 確定有幾個數需要放到各自情況的最後一位,答案是陣列長度 1個數。第二步 確定第i次將此時的最大數排到此時的最後一位時,需要進行比較多少次,答案是陣列長度 1 i次。因為此時已經確定了i 1個數的位置 所以用兩層迴圈即可實現...