C语言-计数排序

 计数排序的基本思想是:统计一个数序列中小于某个元素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 = 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程序执行的过程如下图所示:
C语言-计数排序

 

C语言-计数排序

 

C语言-计数排序

 

 

 

 

 

你可能感兴趣的:(C语言)