您的位置:首页 > 其它

完整的计数排序

2013-08-12 15:27 162 查看
计数排序要求数据的大小范围已知,可以将待排序的数据一一映射到一个计数器。这个计数器一般用数据来表示。如人的年龄:1-200; 字符串:0-255;

或者 对1000-2000之间的数排序,则可以映射到数组0-1000。 当然也可以在整个整数空间内计数,a[Max],但是这样的空间成本太大;

#include <iostream>

using namespace std;

void CountSort(char *pStr)

{

if(pStr==NULL && *pStr=='\0')

return ;

int len=strlen(pStr);

int index=0;

int table[256]={0};

char *ptemp=new char[len+1];

ptemp[len]='\0';

for(int i=0;i<len;++i)

{

index=(int)(pStr[i]);

++table[index];

}

//找到每个元素的应放的最后的一个位置

for(i=1;i<256;++i)

{

table[i]+=table[i-1];

}

//倒着来,保证是稳定的排序

for(i=len-1;i>=0;--i)

{

index=(int)(pStr[i]);

ptemp[(table[index]-1)]=pStr[i];

--table[index];

}

strcpy(pStr,ptemp);

delete [] ptemp;

}

int main()

{

char str[]="wangjianwangaajjdadef";

CountSort(str);

cout<<strlen(str)<<endl;

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: