1. 程式人生 > 實用技巧 >資料結構C語言實現----氣泡排序

資料結構C語言實現----氣泡排序

氣泡排序

  比如有一個長度為10的數字串,用氣泡排序從小到大

  兩個一組兩個一組的比較

  比如第一個和第二個比較,如果後者比前者小,就交換位置,如果後者比前者大,什麼都不做

  之後再第二個和第三個比較,第三個和第四個比較。。。。

  最後,這10個數中最大的數就被放到了最後面,也就是第十個位置

  然後重複上面的操作,把剩下的最大的數放到第九個位置。。。

注意:如果進行在其中一步中,所有的數字進行比較後都沒有交換位置,說明這串數字已經是有序數字串了,就不用再做比較了

執行結果:

原始碼如下:

#include<stdio.h>
typedef int keytype;
//氣泡排序
void bubblesort(keytype k[] , int n)
{
    int first;//比較元素
    int second;//比較元素
    int flag = 1;//判斷是否繼續比較,0繼續比較,1停止比較
    for (size_t i = n; i >=1 && flag == 1; i--)
    {
        first = 1;
        second = 2;
        flag = 0;
        while (second<=i)
        {
            if (k[second++] < k[first++])//交換
            {
                k[0] = k[second-1];
                k[second-1] = k[first-1];
                k[first-1] = k[0];
                flag = 1;
            }
        }
    }
}
#define MAX 100
int main()
{
    //讀取一串數字
    printf("請輸入一串無序數字:");
    int c;
    int n = 1;
    keytype k[MAX];
    while ((c = getchar())!='\n')
    {
        k[n++] = c-'0';
    }
    if (c == '\n')
    {
        k[n] = '\0';
    }
    //氣泡排序
    bubblesort(k , n-1);
    printf("這串數字從小到大為:");
    for (size_t i = 1; i <= n-1; i++)
    {
        printf("%d",k[i]);
    }
    return 0;
}