非比较排序——计数排序
计数排序
计数排序是非比较排序
void CountSort(int *a,int n)
{//找范围int min=a[0],max=a[0];for(int i=0;i<n;i++){if(a[i]<min){min=a[i];}if(a[i]>max){min=a[i];}}int range=max-min+1;//创建计数用的数组int *count=(int *) malloc(range* sizeof(int));//计数数组的元素全部初始化为0memset(count,0, sizeof(int )*range);//这个是库里面的函数//遍历数组a,计数,这是属于相对映射for(int i=0;i<n;i++){count[a[i]-min]++;}//排序,遍历计数数组,将数据按照顺序赋值给原数组aint j=0;for(int i=0;i<range;i++){while(count[i]--){a[j++]=i+min;}}
}