排序演算法 (1) - Bubble sort
用兩個迴圈來實現,程式複雜度 O( n^2 )
假設有N項,因為每次抓左右兩項做比較 ,因此第一個迴圈為N-1
由於每次的比較都會將當次最大的數搬到右側,因此第一個迴圈每次可以將最大的數"浮至最上方",
故第二個迴圈每次比較的數量越來越少。
範例:
5,4,3,6,7,8,14,11,12,1,2,9,10,13
第一次結束後,最大的數會浮至最上方(右方)
4 3 5 6 7 8 11 12 1 2 9 10 13 14
因此下一次只需要比較N-2次,就可以得到第二大的數,再下一次N-3 ....以此類推。
#include <stdio.h>
#include <string.h>
void BubbleSort(int arr[], int len)
{
int i, j, temp;
for (i = 0; i < len - 1; ++i) //循環N-1次
for (j = 0; j < len - 1 - i; ++j) //每次循環要比較的次數
if (arr[j] > arr[j + 1]) //比大小後交換
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
int main()
{
int i;
int arr[] = {5,4,3,6,7,8,14,11,12,1,2,9,10,13};
bubble_sort(arr, 14);
for (i = 0; i < 14; ++i)
printf("%d ", arr[i]);
return 0;
}
Result :
sh-4.2$ gcc -o main *.c
sh-4.2$ main
1 2 3 4 5 6 7 8 9 10 11 12 13 14