计数排序/Counting Sort

时间:2023-03-09 13:03:21
计数排序/Counting Sort

计数排序的算法思想:

对于每一个元素x,只要确定了元素x有多少个比它小的元素,那么就可以知道其最终的位置。

记输入数组为A[n],存放最后排序输出的数组为B[n],提供临时存储空间的中间数组记为C[k]。

1\首先,将中间数组C[k]清0,其中,0~k为A[n]中元素的取值范围。

2\一边遍历A[n]一边将A[n]的元素值作为C[k]数组中的下标,C[A[n]]++;

3\从前到后遍历C[k],让c[i]=c[i-1]+c[i],这样就可以知道了每个待排元素有多少个比他们小的元素存在。

4\遍历A[n],以访问C[A[n]],按照C[A[n]]的值把元素放到B[n]数组去。由于有可能会有相同的元素,每次存放后C[A[n]]元素要减1,以便下一次再碰到相同的元素时放到前一个位置。

具体实现代码如下:

 #include<iostream>
using namespace std;
int main()
{
int a[]= {,,,,,,,,,}; //输入数组
int b[];//用来存放排序的输出
int c[];//中间数组,40表示待排序列中的每个元素都小于40 for(int i=; i<; i++) c[i]=; //将中间数组置0
for(int i=; i<; i++) c[a[i]]++;
for(int i=; i<; i++) c[i]=c[i]+c[i-];//统计有多少输入元素小于i for(int j=; j>=; j--)
{
b[c[a[j]]-]=a[j];
c[a[j]]--;
}
for(int i=; i<; i++)
cout<<b[i]<<" ";
cout<<endl;
return ;
}