概述
void swap(int *a,int *b)
{
int tmp;
tmp =*a;
*a=*b;
*b=tmp;
}
void selSort(int *s,int n,char **arr,int *arrlen)//选择排序
{
char *p=NULL;
int i;
int j;
int k;
int m;
int offset=0;
int tmp;
*arrlen=0;
for (i=0;i<n-1;i++)
{
tmp=s[i];
k=i;//最大值的下标
for (j=i;j<n;j++)
{
if (tmp<s[j])
{
tmp=s[j];
k=j;
}
}
if (i!=k)//找到了最大值。
{
*arrlen+=s[k];//s【k】为单个字符出现的次数。arrlen为所有字符出现的次数。
*arr =malloc(sizeof(int)*(*arrlen));//动态开辟空间不确定会有多少个字符,因此动态开辟
if (p!=NULL)
{
memcpy(*arr,p,offset);//每一次分配需要将赋值好的值拷贝到新的空间。
free(p);//将原先的值释放掉
p=NULL;
}
p=(char *)*arr;
for (m=0;m<s[k];m++)
{
p[offset]=k;//根据每个字符出现的次数,将字符拷贝到新的数组。
offset+=1;
}
swap(&s[i],&s[k]);//选择排序交换。
}
}
}
char* frequencySort(char* s) {
int i;
int j;
int arrlen;
int l=strlen(s);
//int arr[256]={0};
char *arr;
int tmpArr[256]={0};
for (i=0;i<l;i++)
{
++tmpArr[s[i]];//统计字符出现的次数,
}
selSort(tmpArr,256,&arr,&arrlen);
for (i=0;i<arrlen;i++)
{
s[i]=arr[i];
}
return s;
}
最后
以上就是怕孤独哑铃为你收集整理的根据字符出现频率排序的全部内容,希望文章能够帮你解决根据字符出现频率排序所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复