用起泡法给输入的字符按ASCN码排序从小到大输出 C语言
解决时间 2021-12-25 14:42
- 提问者网友:龅牙恐龙妹
- 2021-12-25 02:19
例如输入:reputation
应该输出:aeionprttu.
我的代码:
#include
#include
void main()
{
void sort(char string[]);
char str[80];
gets(str);
sort(str);
puts(str);
}
void sort(char string[])
{
int i,j;
char t;
for(i=0;i<=strlen(string);i++)
{
for(j=0;j<=strlen(string)-i;j++)
{
if(string[j]>string[j+1])
{t=string[j];string[j]=string[j+1];string[j+1]=t;}
}
}
}
输出的总是少两个字母。
最佳答案
- 五星知识达人网友:英雄的欲望
- 2021-12-25 03:23
1.首先关于冒泡法有几点说明:.
若数组中有N个数据,则第一论比较与交换的次数应该是N-1,第2轮比较与交换的次数为N-2……第i轮比较与交换的次数为N-i,……一共进行(n-1)轮的比较与交换。
2.数组的第一个元素的下标是0.即第一个元素为a[0],最后一个元素应该是a[n-1]
3.循环控制变量i和j的初始量都是0.
4.从上面的分析就可以知道出错的地方。
第一个循环控制中应该改成 for (i=0;i<=strlen(string)-2;j++);或者for(i=0;i
第二个循环改成for(j=0;j<=strlen(string)-i-1;j++),或者直接去掉一个=号
5.c语言是一门科学,很注重实验。有时候可以自己动手改动几个运算符试试。
6。学习愉快
全部回答
- 1楼网友:孤独的牧羊人
- 2021-12-25 03:44
把两个循环句的=去了
- 2楼网友:独钓一江月
- 2021-12-25 03:35
void sort(char string[])
{
int i,j;
char t;
for(i=strlen(string)-1;i>0;i--)//外循环自减,控制内循环结束边界
{
for(j=0;jstring[j+1])
{t=string[j];string[j]=string[j+1];string[j+1]=t;}
}
}
}
冒泡排序:
1 外层变量控制内层循环的结束条件,而非起始点
2 二重循环里,内层循环的控制变量和终止条件必然是一自加一自减
3 如果是无经过优化的冒泡,总共要比较len*(len-1)/2次
4 每次比较,总是比较相邻的两个数,不会发生其它位置的数的比较
我要举报
大家都在看
推荐资讯