今天我和大家一起討論下冒泡排序算法
冒泡排序算法,是一種神奇的算法,它是通過將相鄰的2個數進行對比,依據從大到小,或者從小到大的順序進行交換,最後得出排序結果,核心公式是i = n-1,j = n-1-i,i代表要進行多少趟的循環,j代表每趟需要進行多少次兩兩比較,如果有10個數,那麼就只要循環9趟,每趟只需要比較n-1-i次;理論的不說太多,具體如下:
例如這裡有10個數:15,32,12,16,90,49,17,26,72,43;我們按照從大到小的順序排列.
第1趟:
第1次兩兩比較:2 15 12 16 90 49 17 26 72 43; 因為43比72小,所以不用交換
第2次兩兩比較:32 16 15 12 90 49 17 26 72 43; 因為72比26大,所以72和26進行交換;
第3次兩兩比較:32 16 15 12 90 49 26 17 72 43;
第4次兩兩比較:32 16 15 12 90 49 26 17 72 43;
第5次兩兩比較:32 16 15 12 90 49 26 17 72 43;
第6次兩兩比較:32 16 15 90 12 49 26 17 72 43;
第7次兩兩比較:32 16 90 15 12 49 26 17 72 43;
第8次兩兩比較:32 90 16 15 12 49 26 17 72 43;
結果:90 32 16 15 12 49 26 17 72 43;
通過第一趟(9次兩兩比較)終於把10個數中的最大的數排在左邊了.
接下來我們用程序來實現冒泡排序法,還是10個數,還是從大到小的順序.
[plain] view plain copy print?/*使用冒泡排序法實現數組的從大到小排序*/ #include <stdio.h> int main (void) { int a[10]; int i, j, t; //變量t用來交換兩個數的值 printf("Please input 10 numbers:\n"); for (i=0; i< 10; i++) { printf("a[%d]=", i); //使用循環讓用戶輸入 scanf("%d", &a[i]); } /*開始對用戶輸入的數進行從大到小的排序*/ for (i=0; i < 9; i++) { for(j=0; j<9-i; j++) { if (a[j] < a[j+1]) { t = a[j]; //把較小的數的值賦給t a[j] = a[j+1]; //把較大的數的值賦給較小的數 a[j+1] = t; //把t的值賦給原來較大的數以完成交換 } } } printf("\n"); printf("排序後的結果為:\n"); for (i=0; i<10; i++) { printf("%d ", a[i]); } printf("\n\n"); getch(); //用於解決編寫的可執行文件一閃而過的情況 }
運行結果如下圖:
最後送同學們一句話:編程路漫漫,需其修遠兮;遇到難的程序,多單步調試,耐得住寂寞,才守得住繁華!