詳解氣泡排序--適用於初學者,包會
阿新 • • 發佈:2019-01-08
1.氣泡排序的基本思想就是:每次都比較兩個相鄰的元素,如果他們的順序錯誤就把他們的位置調換過來;
2.例如 5 9 7 6 1 8 13 4
他們每次都是兩兩比較,所以每一輪要比較n-i次(升續排列每次都會確定一個剩餘元素中最大的一個;反之,每次都會確定一個剩餘元素中最大的一個)。總共有n個元素要比較n-1輪;(這個都理解吧,不理解的可以自己每兩個比較一下試試)。
下面預設升續
第一輪:
i=1,比較8-1=7次;先比較5和9,他們的順序沒有錯誤,不動;
再比較9和7,發現順序錯誤,把9和7的位置交換,這樣前三個數字的順序就變成了5,7,9;
接著9和6比較,發現順序錯誤,把9和6的位置交換, 這樣前三個數字的順序就變成了5,7,6,9;
下面依次類推。。最後的順序就變成了5,7,6,1,8,9,4,13;確定了序列中的最大元素。
第二輪;
i=2,比較8-2=6次;和第一輪一樣,依次兩兩比較,最後確定序列第二大的9的位置。
。。。。。
最後一輪:確定了序列的升續排列1,4,5,6,7,8,9,13;
下面來張圖例(百度而來)
模板程式碼
純手打,學明白的,點個贊獎勵一下啦!! 不是很理解的,可以給我留言,我看到的話會回覆的! 共同學習,有什麼錯誤,希望一起交流,謝謝!
模板程式碼
#include <stdio.h> #include <string.h> using namespace std; int main() { int a[1000]; int i, j, n; while(~scanf("%d", &n)) { memset(a, 0, sizeof(a)); for(i = 1; i <= n; i++) scanf("%d", a + i); for(i = 1; i <= n-1; i++)//比較n-1趟 for(j = 1; j <= n-i; j++)//每次比較相鄰的兩個元素,比較前n-i次 { if(a[j] < a[j+1])//小於號從大到小排序 ,大於號從小到大排序 { int t = a[j];//陣列中的值為變數j a[j] = a[j + 1]; a[j + 1] = t; } } for(i = 1; i <= n; i++) printf("%d ", a[i]); } return 0; }
純手打,學明白的,點個贊獎勵一下啦!! 不是很理解的,可以給我留言,我看到的話會回覆的! 共同學習,有什麼錯誤,希望一起交流,謝謝!