计数排序算法(c语言测试)(稳定版本)

来源:互联网 发布:刷球球大作战圣衣软件 编辑:程序博客网 时间:2024/05/17 02:38
#include<stdio.h>/*计数排序   一个稳定不需要比较 效率为线性的算法   基本原理::         通过借助临时数组的下标来记录 需要排序数组中值排序后  的正确位置      *//*   输入: a数组  k为数组中的最大值  length为a 数组的长度*/void countSort(int a[],int k,int length){ int c[20];//用途是记录a数组中所有值所应该在的地方 int b[20];   //1----先是置0for(int i= 0 ;i<20; i++){    c[i]=0 ;}  //2---然后将a中的值数量以c中的下标对应记录  既c的下标代表a中的值,c中的值代表a中值为c下标的个数for(int j=0 ; j<length;j++){   c[a[j]] =c[a[j]]+1;}   //3--这是记录 a中值 在a数组中排序后所应该在的位置for(int h= 0 ; h<k+1 ;h++){    c[h+1] = c[h+1]+c[h];  } //4--排序到b数组中去for(int d=length-1 ; d>=0;d--){      b[c[a[d]]-1]=a[d];  c[a[d]]=c[a[d]]-1;} //5--完毕for(int q=0;q<length;q++){    a[q]=b[q] ; }    }void main(){int  a[11]={1,2,6,1,9,1,9,2,4,2,5};countSort(a,9,11);    for(int i= 0 ; i<11;i++){  printf("%d",a[i]);}}


原创粉丝点击