歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> 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.     int a[10]; 
  5.     int i, j, t;            //變量t用來交換兩個數的值 
  6.  
  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.     /*開始對用戶輸入的數進行從大到小的排序*/ 
  15.  
  16.     for (i=0; i < 9; i++) 
  17.     { 
  18.         for(j=0; j<9-i; j++) 
  19.         { 
  20.             if (a[j] < a[j+1]) 
  21.             { 
  22.                 t = a[j];           //把較小的數的值賦給t 
  23.                 a[j] = a[j+1];         //把較大的數的值賦給較小的數 
  24.                 a[j+1] = t;         //把t的值賦給原來較大的數以完成交換 
  25.             } 
  26.         } 
  27.     } 
  28.     printf("\n"); 
  29.     printf("排序後的結果為:\n"); 
  30.     for (i=0; i<10; i++) 
  31.     { 
  32.         printf("%d ", a[i]); 
  33.     } 
  34.     printf("\n\n"); 
  35.     getch();            //用於解決編寫的可執行文件一閃而過的情況 
/*使用冒泡排序法實現數組的從大到小排序*/
#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