C中的冒泡排序输出与输入相同

时间:2014-02-26 10:05:42

标签: c

作为一项学校作业,我们正在编写一个泡泡分类程序。我写的代码有效。唯一的事情是输出返回输入并且不返回交换的输入。我有点卡住了。无论我做什么,我都会得到错误或没有任何改变。有人知道出了什么问题吗?任何帮助将非常感谢!!

#include <stdio.h>
#include <string.h>
#define MAXLENGTH 100      


void getString(char *str);  
void printResult(char *str);
int greaterThan(char ch1, char ch2); 
void swap(char *str, int index1, int index2);  


int main(void) {
int len;                  // length of the entered string
char str[MAXLENGTH];      // input should be no longer than MAXLENGTH


getString(str);
len = strlen(str);  // get length of the string, from sting.h
int j;
for (j = 0; j < len-j; j++) {  
    int i;
    for (i = 0; i < len-j; i++){    
        char ch1 = str[i];  
        char ch2 = str[i+1];    
        if (greaterThan(ch1, ch2)) {    
            swap(str, i, i+1);  // swap char 1
            swap(str, i, i+1);  // swap char 2
        }
    }
}
printResult(str);

return(0);
}



void getString(char *str) {    
    printf("Enter the string you would like to sort: ");  
    scanf("%s",str);   
    }


void printResult(char *str){    
    printf("Here is the sorted string: ");  
    printf("%s",str);   
}


int greaterThan(char ch1, char ch2){    
    return (ch1 > ch2);
}


void swap(char *str, int index1, int index2){   
    char h =  str[index1];  
    str[index1] = str[index2];  
    str[index2] = h;    
}

3 个答案:

答案 0 :(得分:2)

试试这个:

getString(str);
len = strlen(str);  // get length of the string, from sting.h
int j;
for (j = 0; j < len-j; j++) {  
    int i;
    for (i = 0; i < len-j; i++){    
        char ch1 = str[i];  
        char ch2 = str[i+1];    
        if (greaterThan(ch1, ch2)) {    
            swap(str, i, i+1);  // swap char 1
        }
    }
}
printResult(str);

return(0);
}

答案 1 :(得分:1)

下面:

if (greaterThan(ch1, ch2)) {    
    swap(str, i, i+1);  // swap char 1
    swap(str, i, i+1);  // swap char 2
}

你交换两次,而你只应交换一次。

我很糟糕我的答案的下一部分以前的版本不是泡沫短缺:

另一个问题是你使用彼此相邻的元素而你没有使用i和j索引的元素进行比较和交换。所以你最好应该有这样的东西:

    if (greaterThan(str[i], str[j]))
        swap(str, i, j);

答案 2 :(得分:0)

if (greaterThan(ch1, ch2)) {    
    swap(str, i, i+1);  // swap char 1
    swap(str, i, i+1);  // swap char 2
}

在这段代码中你淹没了两次。

例如:str = [&#39; a&#39;&#39; b&#39;&#39; c&#39;] swap(str,1,2)用于第一次交换&#34; str&#34;将是['a','c','b']和第二次交换&#34; str&#34;将是['a','b','c']。这就是输出与输入相同的原因。

您只需要拨打swap一次功能。

if (greaterThan(ch1, ch2)) {    
    swap(str, i, i+1);
}