为什么这个实现不了字符排序,为什么还要另外定义一个for循环j让j=i+1的函数才能实现呢?

错误做法:

img


为什么这个实现不了字符排序,为什么还要另外定义一个for循环j让j=i+1的函数才能实现呢?
还有为什么函数调用中让i和j<6呢?
正确做法:

img

你的大概格式我明白了,你是想调用冒泡法进行排序,可是你的冒泡法从第二个for函数就已经开始出错了。

你的第一个图中,
一次for循环只能确定最后一位是最小
你还得循环去确定倒数第二位
。。。以此类推

第二个图中,
内层循环每循环一次确定了第i位的顺序。
第一次循环确定了第1位最大,
然后第二位
。。。

修改如下,供参考:

#include <stdio.h>
#include <string.h>
void fun(char s[], int n)
{
    char ch;
    int i, j;
    for (i = 0; i < n - 1; i++) {
        for (j = 0; j < n - 1 - i; j++) {
            if (s[j] > s[j + 1]) {
                ch = s[j];
                s[j] = s[j + 1];
                s[j + 1] = ch;
            }
        }
    }
}
int main()
{
    char s[128];
    scanf("%[^\n]", s);
    fun(s, strlen(s));
    printf("%s", s);
    return 0;
}