c - 冒泡排序以无限循环结束

标签 c bubble-sort

我创建了一个冒泡排序程序。它最终陷入无限循环。 我在一些地方添加了注释,以便代码易于理解。 欢迎任何有关如何缩小代码的建议。

我在调试程序时发现了这个 -

当标准输入为“ccbbaa”时,经过一些递归,最终输入(aabbcc)和temp(aabbcc)相同,然后执行strcmp()的条件后,“temp”的值更改为“baabcc” .

  1. 有什么原因可以解释为什么会发生这种情况吗? ——这就是无限循环的原因。

  2. 字符数组末尾是否有“\0”(将输入复制到 temp 时)?

我通过使用 for 循环而不是 strcmp() 解决了这个问题。调查为什么 strcmp() 目前不起作用。

更新的代码可用 - http://ideone.com/4Bdblh (已解决)

错误代码

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<ctype.h>

void sort(char* input)
{
    const int length = strlen(input);
    int j = length -1;
    char temp[length];
    for(int i=0; i<length; i++)
    {
        temp[i]= *(input+i);
    }

    while(j)
    {
        if((int)*(input+1) < (int)*(input))
        {
            char temp1;
            temp1 = *(input);
            *input = *(input + 1);
            *(input + 1) = temp1;
        }
        input++;
        j--;
    }
        input = input - length +1;
        while(strcmp(temp,input))
        {
        sort(input);
        }
}
int main()
{
    char* input = malloc(sizeof(char)*1000);
    scanf("%[^\n]%*c",input);
    sort(input);
    printf("%s",input);
    return 0;
}

最佳答案

使用数组和 for 循环回答 -

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<ctype.h>
#define MAX 1000

void sort(char input[])
{
    const int length = strlen(input);
    int j = length -1;
    char temp[length];
    for(int i=0; i<length; i++)
    {
        temp[i]= input[i];
    }
    int l=0;
    while(j)
    {

        if(input[l+1] < input[l])
        {
            char temp1;
            temp1 = input[l];
            input[l] = input[l+1];
            input[l+1] = temp1;
        }
        l++;
        j--;
    }
        for(int k=0; k<length; k++)
        {
            if(temp[k]!=input[k])
            {
                sort(input);
            }
        }       
}
int main()
{
    char input[MAX];
    scanf("%[^\n]%*c",input);
    sort(input);
    printf("%s",input);
    return 0;
}

关于c - 冒泡排序以无限循环结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41061736/

相关文章:

c - 使用主入口点将 HINSTANCE 传递给 WNDCLASS

c++ - 使用 pin 添加您自己的说明

prolog - Prolog语言中的冒泡排序

带有冒泡排序的 C++ 结构

java - 冒泡排序函数不对给定数组进行排序

python - tkinter 中的冒泡排序可视化

c++ - 退回 VLA 安全吗?

c - 关系运算符 == 在 C 中如何工作?

python - 在 python 中将前导零添加到十六进制值

java - 升序冒泡排序 - 程序无法编译