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