计数排序的基本思想是:统计一个数序列中小于某个元素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程序执行的过程如下图所示:
。
原文:http://www.cnblogs.com/xiaojingang/p/3724517.html