行者

慢慢走,不要停
随笔 - 15, 文章 - 0, 评论 - 0, 阅读 - 3328
  博客园  :: 新随笔  :: 管理
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

计数排序

Posted on   angury  阅读(169)  评论(0编辑  收藏  举报
复制代码
#include<stdio.h>
#include<stdlib.h>
void count_sort(int A[],int B[],int N) { /* **A:原数组 **B:排序后数组 **N:AB数组的长度 */ /* **计算原数组中数据的范围,确定count的长度 */ int max=A[0]; int min=A[0]; int i; for(i=0;i<N;i++) { max=(max>A[i])?max:A[i]; min=(min<A[i])?min:A[i]; } int length=max-min+1; /* **创建并初始化count */ int *count=(int *)malloc(sizeof(int)*length); if(NULL==count) { printf("F"); exit(1); } for(i=0;i<length;i++)/*错误✖2:没有初始化*/ { count[i]=0; } /* **计数数组 */ for(i=0;i<N;i++) { count[A[i]-min]++; } /* **累加数组 */ for(i=1;i<length;i++)/*粗心的错误:i<N*/ { count[i]=count[i]+count[i-1]; } /* **反向填充目标数组 */ for(i=N-1;i>=0;i--)/*i--*/ { B[count[A[i]]-1]=A[i]; count[A[i]]--; } /* **释放内存 */ free(count); } int main() { int A[40]={1,6,7,5,2,3,4,9,0,5,9,6,3,1,4,8,5,2,0,7,6,4,1,3,2,9,8,7,0,6,4,9,1,3,5,7,8,9,6,7}; int N=40; int B[40]={0}; count_sort(A,B,N); int i; for(i=0;i<N;i++) { printf("%d ",B[i]); } return 0; }
复制代码

 

点击右上角即可分享
微信分享提示