資料結構C語言實現----氣泡排序
阿新 • • 發佈:2020-07-31
氣泡排序
比如有一個長度為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; }