首页 > 代码库 > 计数排序

计数排序

 计数排序的基本思想是:统计一个数序列中小于某个元素a的个数为n,则直接把该元素a放到第n+1个位置上。当然当过有几个元素相同时要做适当的调整,因为不能把所有的元素放到同一个位置上。计数排序假设输入的元素都是0到k之间的整数

 

 1 #include <stdio.h>
 2 void sort(int *A, int *B, int array_size, int k)
 3 {
 4         int C[k+1], i, value, pos;
 5         for(i=0; i<=k; i++)
 6         {
 7             C[i] = 0;
 8         }
 9         for(i=0; i< array_size; i++)
10         {
11             C[A[i]] ++;
12         }
13         for(i=1; i<=k; i++)
14         {
15             C[i] = C[i] + C[i-1];
16         }
17         for(i=array_size-1; i>=0; i--)
18         {
19             value =http://www.mamicode.com/ A[i];
20             pos = C[value];
21             B[pos-1] = value;
22             C[value]--;
23         }
24 }
25 
26         
27 int main()
28 {
29         int A[8] = {2, 5, 3, 0, 2, 3, 0, 3}, B[8], i;
30         sort(A, B, 8, 5);
31         for (i=0; i<= 7; i++)
32         {
33             printf("%d ", B[i]);
34         }
35         printf("\n");
36         return 0;
37 }

 

对于数据2 5 3 0 2 3 0 3程序执行的过程如下图所示: