/*八種排序之氣泡排序*/
//氣泡排序的原理是:從左到右,相鄰元素進行比較。每次比較一輪,
//就會找到序列中最大的乙個或最小的乙個。這個數就會從序列的最右邊冒出來。
/* 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個數的位置 所以用兩層迴圈即可實現...