[ C語言生活記事 ] Sorting algorithm - (1) Bubble sort

排序演算法 (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