今天開始研究算法,網上找了本書《啊哈,算法》,準備把這本有趣的書研究個透徹,有些圖是引用書中的圖,在此聲明一下。不說了,上第一種算法:桶排序
int main(int argc, const char * argv[]) {
@autoreleasepool {
//排序法
int a[11],t;
for (int i=0; i<=10; i++) {// 初始化數組元素,都為0,可把每個元素當做一個桶,且桶里都為0
a[i] = 0;
}
for (int i=1; i<=5; i++) {//輸入五個[0,10]的數,把輸入的數分別放入對應的桶中
printf("請輸入第%d個數:",i);
scanf("%d",&t);
a[t]++;
}
printf("由小到大排序后:");
for (int i=0; i<=10; i++) {//依次判斷a[0]-a[10]
for (int j=1; j<=a[i]; j++) {//出現幾次就打印幾次
printf("%d ",i);
}
}
printf("\n由大到小排序后:");
for (int i=10; i>=0; i--) {
for (int j=1; j<=a[i]; j++) {
printf("%d ",i);
}
}
printf("\n");
/*
請輸入第1個數:5
請輸入第2個數:4
請輸入第3個數:9
請輸入第4個數:7
請輸入第5個數:2
由小到大排序后:2 4 5 7 9
由大到小排序后:9 7 5 4 2
*/
}
return 0;
}
小結:
優點:速度快
缺點:占內存空間,假如需要對千萬個數進行排序,那就要申請千萬個變量,又或者需要給199999、323、1、89、101進行排序,那就要定義int a[200000]了,浪費空間,再者如果去對1.2,2.3,10.4,3.9,1.8進行排序,這個排序法就無法排序了。
故此算法適合小范圍整數排序。