counting_sort
学习算法导论的过程
感觉自己好懒,懒得去写题,懒得画流程图去理解
计数排序基本思想:对每一个输入的X都有小于等于X的数的数目,即对应X在数组中所排的位置。
计数排序的时间复杂度是线性的O(N+k),但当k过大时这个算法需要的辅助空间就过大了;
1 #include<stdio.h> 2 #include<string.h> 3 #define N 8 4 void counting_sort(int a[],int b[],int MAX); 5 int main(){ 6 int a[10]={2,5,3,0,2,3,0,3}; 7 int b[10]; 8 int i; 9 counting_sort(a,b,5); 10 for( i=1; i<=N; i++) 11 printf("%d ",b[i]); 12 return 0; 13 } 14 //计数排序 15 void counting_sort(int a[],int b[],int k){ 16 17 int c[1000]; 18 int i; //将存储数组中各个数字个数的辅助数组c初始化 19 for( i=0; i<=k; i++)//O(k) 20 c[i] = 0; //记录待排a数组中每个数出现的个数 22 for( i=0; i<N; i++)//O(N) 23 c[a[i]]++; 24 //计算出每个数大于等于数的数目 25 for( i=1; i<=k; i++)//O(k) 26 c[i] = c[i]+c[i-1]; 27 //归位到b数组中 28 for( i=0; i<N; i++){//O(N) 29 b[c[a[i]]] = a[i]; 30 c[a[i]] = c[a[i]]-1; 31 } 32 33 }
下面是一些简单的图解:

浙公网安备 33010602011771号