/*
函数:计数排序 当k=O(n)时,排序时间是O(n)
核心思想
对于每一个元素,确定小于x的元素个数a.
利用这一个信息直接将该元素放到a+1位置上.
需要都为正数.
时间:15.7.16
Jason Zhou
热爱你所写下的程序,他是你的伙伴,而不是工具.
*/
#include<iostream>
using namespace std;
int count_sort(int arr[],int B[],int len,int k)
{
int* C=new int[++k];
for (int i=0;i<=k;i++)
{
C[i]=0;
}
//出现次数
for (int j=0;j<=len;j++)
{
C[arr[j]]++;
}
//计算比它小的元素个数
for (int m=0;m<k;m++ )
{
C[m+1]+=C[m];
}
for (int n=len;n>=0;n--)
{
B[--C[arr[n]]]=arr[n];
C[arr[n]]--;
}
return 0;
}
int main()
{
int arr[13]={8,5,4,6,13,7,1,9,12,11,3,10,2};
int len=sizeof(arr)/sizeof(arr[0]);
cout<<"原始数据"<<endl;
for (int i=0;i<len;i++)
{
cout<<arr[i]<<" ";
}
cout<<endl;
int * B=new int[len];
int k=arr[0];
//找到数组的最大值
for (int j=1;j<len;j++)
{
if (arr[j]>k)
k=arr[j];
}
count_sort(arr,B,len-1,k);//快读排序
cout<<"计数排序"<<endl;
for (int i=0;i<len;i++)
{
cout<<B[i]<<" ";
}
cout<<endl;
delete(B);
return 0;
}
计数排序
最新推荐文章于 2022-03-02 16:16:42 发布