桶排序

一、對輸入的數據進行排序

#include<stdio.h>
int main(){
         int a[11];
         //得分從0~10
         int i,j,t;
         for(int i=0;i<=10;i++){
                  a[i]=0;
         }
        //對數組進行初始化
         for(int i=0;i<5;i++){
                  scanf("%d",&t);
                  a[t]++;
         //若是得分爲5分,則a[4]=1,這是用來計算某一個得分出現的次數
         }
         for(int i=0;i<=10;i++)
                  for(int j=1;j<=a[i];j++){
                           printf("%d",i);
         //打印出對應的分數,即數組中第幾個數字
                  }
         getchar();
         getchar();
        //用來暫停程序,以便查看程序的輸出(這時不會出現「按任意鍵退出」的字樣)
        //也能夠採用system(「pause」);可是須要引入頭文件#include<stdlib.h>
         return 0;
}

#上述程序是按照遞增順序排列,若是按照遞減順序排列,則只需修改以下代碼:
         for(int i=10;i>=0;i--)
                  for(int j=1;j<=a[i];j++){
                           printf("%d",i);
                  }

二、輸入n個數據,對其排序

#include<stdio.h>
int main(){
         int book[1001];
         int i,j,n,t;
         for(int i=0;i<=1000;i++){
                  book[i]=0;
         }
         scanf("%d",&n);
        //限定輸入的個數
         for(int i=0;i<n;i++){
                  scanf("%d",&t);
                  book[t]++;
         }
         for(int i=0;i<=1000;i++)
                  for(int j=1;j<=book[i];j++){
                           printf("%d  ",i);
        //若是須要輸出結果之間有間隔,只須要在輸出的佔位符後面加上空格便可
                  }
         getchar();
         getchar();
         return 0;
}
注:這兩個能夠稱之爲桶排序,可是實際上桶排序要比這個複雜。
其缺點在於:浪費空間,上述2中須要申請1001個內存空間;不能進行小數的排序。

三、分析

(1)時間複雜度


(2)空間複雜度


(3)使用狀況

相關文章
相關標籤/搜索