桶排序:
PS1:將5分员凝、2分钞翔、5分、3分和8分森书,按從小到大的順序進行排序使兔。
- 自己的程序?qū)嵗?/li>
#include<stdio.h>
int main()
{
int a[100], i, j, t, n;
scanf("%d",&n); //輸入n個數(shù)
for(i = 1;i <= n; i++) //循環(huán)讀入n個數(shù)
scanf("%d",&a[i]);
for(i = 1; i <= n - 1; i++)
{
for(j = 1; j <= n -i; j++)
{
if(a[j] > a[j+1]) //此處控制輸出結(jié)果的排序方向建钥,更改大于小于符號即可
{t = a[j]; a[j] = a[j+1]; a[j+1] = t;}
}
}
for(i = 1; i <= n; i++)
printf("%d", a[i]);
getchar();getchar();
return 0;
}
/*輸入題目中的數(shù)后
5
5 3 5 2 8
輸出結(jié)果為23558*/
書中算法實例:
申請一個大小為11的數(shù)組 int a[11]。運用數(shù)組下標0 ~ 10表示0 ~ 10分(最高分為10分)虐沥,每次讀入一個數(shù)熊经,就在數(shù)組a的對應(yīng)處位置加1泽艘,以此往復(fù)。
a[0]~a[10]中根據(jù)每個分數(shù)出現(xiàn)的次數(shù)進行打印镐依,沒有出現(xiàn)則不打印輸出匹涮。
桶排序算法(完整代碼):
#include<stdio.h>
int main()
{
int a[11], i, j, t;
for(i = 0; i <= 10; i++) //此處控制桶排序的打印輸出數(shù)的排列方向
a[i] = 0;
for(i = 1; i <= 5; i++)
{
scanf("%d",&t);
a[t]++;
}
for(i = 0; i <= 10; i++) //依次判斷a[0]~a[10]
for(j = 1; j <= a[i]; j++)//出現(xiàn)幾次就打印幾次
printf("%d",i);
getchar();getchar();
//這里的getchar();日志的意思槐壳,在實例程序一定要寫上然低,平時可以不寫
//也可以用別的代替,例如system(“pause”);等來代替
return 0;
}
/*輸入題目中的數(shù)后
5 3 5 2 8
輸出結(jié)果為23558
*/
- 此上為簡化版的桶排序算法务唐,其本質(zhì)不能真正算是排序算法雳攘,沒有辦法將人和數(shù)值對應(yīng),例如成績欄枫笛,只能將成績排序無法對應(yīng)該學(xué)生吨灭,意思是不能將中文和數(shù)值結(jié)合進行打印。還有一個桶排序占用空間太大刑巧,假如所排序的數(shù)值范圍在一千到一億就沒辦法喧兄,因為這樣就要建立非常巨大的空間來進行對這些數(shù)值統(tǒng)計,非常浪費空間海诲。