C语言字符串排序

来源:百度知道 编辑:UC知道 时间:2024/06/09 08:35:57
从键盘输入一字符串,将该字符串按下述要求处理后输出:将大于原首字符的各字符按原来相互间的顺序关系集中在原首字符的左边,小于等于原首字符的各字符按升序集中在原首字符的右边。 例如:
输入:aQWERsdfg7654!@#$hjklTUIO3210X98aY
输出:sdfghjkla!#$0123456789@EIOQRTUWXYa
#include<stdio.h>
main()
{char s[80];int i,j,t,k;
gets(s);k=strlen(s);
for(i=0;i<k-1;i++)
{for(j=i+1;j<k;j++)
{if(s[j]>s[i])
t=s[j];
s[j]=s[i];
s[i]=t;}
}
puts(s);
}有什么问题?

你这是在用选择法对以一字符串排序,不符合要求
我的大体思路是:先把大于原首字母的字符交换到左边
那么剩下的就是小于等于原首字母的字符
剩下的问题是对小于等于原首字母的字符排序
#include<stdio.h>
#include<string.h>//使用strlen()函数需要包含的头件
main()
{
char s[80],ch;
int i,j,k,t,m;j=0;
gets(s);
k=strlen(s);ch=s[0];
for(i=1;i<k;i++)
if(s[i]>ch)
{
t=s[i];s[i]=s[j++];s[j++}=t;//j记录交换了多少次
}
for( i=j;i<k-1;i++)
{
m=i;
for(j=i+1;j<k;j++)
if(s[j]<s[m])m=j;//只交换下标,节省时间
if(m!=i)
{
t=s[i];s[i]=s[m];s[m]=t;
}
}
puts(s);
}

#include<stdio.h>
#include<string.h>
void main()
{char s[80];
int i,j,t,k;
gets(s);k=strlen(s);
for(i=0;i<k-1;i++)
for(j=i+1;j<k;j++)
{if(s[j]>s[i])
{t=s[j];
s[j]=s[i];
s[i]=t;
}
}
puts(s);
}
试一下这个程序能不能得到你