歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 關於冒泡排序算法

關於冒泡排序算法

日期:2017/3/1 9:06:25   编辑:Linux編程

今天我和大家一起討論下冒泡排序算法

冒泡排序算法,是一種神奇的算法,它是通過將相鄰的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?
  1. /*使用冒泡排序法實現數組的從大到小排序*/
  2. #include <stdio.h>
  3. int main (void)
  4. {
  5. int a[10];
  6. int i, j, t; //變量t用來交換兩個數的值
  7. printf("Please input 10 numbers:\n");
  8. for (i=0; i< 10; i++)
  9. {
  10. printf("a[%d]=", i); //使用循環讓用戶輸入
  11. scanf("%d", &a[i]);
  12. }
  13. /*開始對用戶輸入的數進行從大到小的排序*/
  14. for (i=0; i < 9; i++)
  15. {
  16. for(j=0; j<9-i; j++)
  17. {
  18. if (a[j] < a[j+1])
  19. {
  20. t = a[j]; //把較小的數的值賦給t
  21. a[j] = a[j+1]; //把較大的數的值賦給較小的數
  22. a[j+1] = t; //把t的值賦給原來較大的數以完成交換
  23. }
  24. }
  25. }
  26. printf("\n");
  27. printf("排序後的結果為:\n");
  28. for (i=0; i<10; i++)
  29. {
  30. printf("%d ", a[i]);
  31. }
  32. printf("\n\n");
  33. getch(); //用於解決編寫的可執行文件一閃而過的情況
  34. }
/*使用冒泡排序法實現數組的從大到小排序*/
#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();            //用於解決編寫的可執行文件一閃而過的情況
}

運行結果如下圖:

最後送同學們一句話:編程路漫漫,需其修遠兮;遇到難的程序,多單步調試,耐得住寂寞,才守得住繁華!

Copyright © Linux教程網 All Rights Reserved