几种常用的排序方法6--计数排序

计数排序

计数排序不同于前面所有的排序,它并不是一种比较排序。

计数排序假设输入元素中每一个都是介于0到k之间的整数,计数排序运行时间是O(n);

计数排序的基本思想是:对每一个输入的元素x,统计出小于x的元素个数,然后可以把x直接放到输出数组中。例如有5个元素小于x,那么x就是数组中第6个元素B[5]。

 1 void Counting_Sort(int * A, int * B,int n, int k)
 2 {//A是原始数组,B用来存数排序后的结果,n是数组长度,k是所有元素范围上限 
 3      int C[k+1];
 4      for(int i = 0; i < k; i++)
 5      {
 6           C[i] = 0;   //初始化         
 7      }     
 8      for(int j = 0; j < n; j++)
 9      {
10           C[A[j]] = C[A[j]] + 1;  //C[i]包含等于i的元素个数            
11      }
12      for(int i = 0; i < k; i++)
13      {
14              C[i+1] = C[i+1] + C[i];   //C[i]包含小于或等于1的个数    
15      }
16      for(int j = 0; j < n; j++)
17      {
18              B[C[A[j]] - 1] = A[j];
19              C[A[j]] = C[A[j]] - 1;        
20      } 
21 }
posted @ 2012-11-21 23:02  缓冲区溢出  阅读(296)  评论(0编辑  收藏  举报