桶排序

假设有n个数组成一个数组a[n],a[n]的范围是0~m,现在需要对这个数组进行排序。

桶排序的过程:我们准备一个数组b[m],初始化该数组为0。观察a[i]的值(0<=i<=n),比如说a[i]=x(显然0<x<m),则b[x]++,即利用b[x]存储a[n]中值为x的元素出现了几次。最后,我们按照0~m的顺序,依次输出b[x]次x,得到的序列就是排序结果。

 

废话不多说,直接上代码:

 1 #include<iostream>
 2 
 3 using namespace std;
 4 
 5 //假设桶排序所排序的n个数分布在min~max之间
 6 void booksort(int* a,int n,int min,int max)
 7 {
 8     int* book=new int[max-min+1];
 9     memset(book,0,sizeof(int)*(max-min+1));
10 
11     for(int i=0;i<n;i++)
12     {
13         book[a[i]-min]++;
14     }
15 
16     for(int i=0;i<(max-min+1);i++)
17     {
18         for(int j=0;j<book[i];j++)
19         {
20             cout<<i+min<<" ";
21         }
22     }
23 }
24 
25 
26 
27 int main()  
28 {  
29     int str[10]={8,4,5,7,55,8,42,3,5,8};
30 
31     booksort(str,10,3,55);
32 
33     cout<<endl;
34 
35     return 0;
36 }  

桶排序是一种不稳定排序,其时间复杂度为O(N)+O(M*(N/M)*log(N/M))=O(N+N*(logN-logM))=O(N+N*logN-N*logM)。

 

posted @ 2018-03-15 10:11  8号prince  阅读(101)  评论(0编辑  收藏  举报