冒泡排序的原理是:從左到右,相鄰元素進行比較。每次比較一輪,就會找到序列中最大的一個或最小的一個。這個數就會從序列的最右邊冒出來。
以從小到大排序為例,第一輪比較后,所有數中最大的那個數就會浮到最右邊;第二輪比較后,所有數中第二大的那個數就會浮到倒數第二個位置……就這樣一輪一輪地比較,最后實現從小到大排序。
代碼如下
#include<stdio.h> void Bubble_sort(int arr[], int size) { int j,i,tem; for (i = 0; i < size-1;i ++)//size-1是因為不用與自己比較,所以比的數就少一個 { int count = 0; for (j = 0; j < size-1 - i; j++) //size-1-i是因為每一趟就會少一個數比較 { if (arr[j] > arr[j+1])//這是升序排法,前一個數和后一個數比較,如果前數大則與后一個數換位置 { tem = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tem; count = 1; } } if (count == 0) //如果某一趟沒有交換位置,則說明已經排好序,直接退出循環 break; } } int main() { int arr[10]; int i; printf("請輸入10個數\n"); for (i = 0; i < 10; i++) //接收用戶的數值 { scanf("%d", &arr[i]); } printf("排序前的數組>"); for (i = 0; i < 10; i++) { printf("%d ", arr[i]); } printf("\n排序后的數組>"); Bubble_sort(arr, 10); for (i = 0; i < 10; i++) { printf("%d ", arr[i]); } return 0; }
值得注意的是函數中的定義的count是為了檢驗是否進行了元素的交換,是對代碼的一種優化
運行結果>