1. 程式人生 > >C語言排序(一)——桶排序

C語言排序(一)——桶排序

前段時間刷微博看見一個段子,好像是個桶排序。 哈哈哈…

那撒叫桶排序呢? 貼書

桶排序(Bucketsort)或所謂的箱排序,是一個排序演算法,工作的原理是將陣列分到有限數量的桶裡。每個桶再個別排序(有可能再使用別的排序演算法或是以遞迴方式繼續使用桶排序進行排序)。桶排序是鴿巢排序的一種歸納結果。當要被排序的陣列內的數值是均勻分配的時候,桶排序使用線性時間O(n)。桶排序並不是比較排序,他不受到 O(n log n)下限的影響。
桶排序以下列程式進行:
1、設定一個定量的陣列當作空桶子。
2、尋訪序列,並且把專案一個一個放到對應的桶子去。
3、對每個不是空的桶子進行排序。
4、從不是空的桶子裡把專案再放回原來的序列中。

正好最近在溫習C語言的演算法相關知識,所以就用C來實現一下吧!
放程式碼

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

#define NUM 100              //The largest number-1 in the queue
#define M   4               //Number of queues

int main(int argc, char const *argv[])
{
	int a[NUM], i, j, t;

	for(i = 0 ;i < NUM; i++)
		a[i]=0;
	
	for(i = 0; i < M; i++)  //Scanf
	{
		scanf("%d", &t);
		a[t]++;  
	}

	for(i = 0; i < NUM; i++)  //Printf
		for(j = 0; j < a[i]; j++) 
			printf("%d ", i);

	getchar();
	return 0;
}

從上面的程式碼就可以看出,桶排序就沒有比較的過程! 這是以犧牲空間來換取時間的一種排序方式。

哈哈哈,走了!
打算慢慢的把排序演算法總結一下!