Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 运行气泡排序后出现运行时错误_C_Arrays_Runtime Error_Bubble Sort - Fatal编程技术网

C 运行气泡排序后出现运行时错误

C 运行气泡排序后出现运行时错误,c,arrays,runtime-error,bubble-sort,C,Arrays,Runtime Error,Bubble Sort,我试图编写一个对数组进行冒泡排序的程序,但每次运行该程序时,都会弹出一个错误:运行时错误:索引4超出“int[e]”类型的界限。 这里的问题是什么 int main(void) { printf("How many elements are there in the array?: "); int e = get_int(); int array[e]; for (int i = 0; i < e; i++) { printf("Inse

我试图编写一个对数组进行冒泡排序的程序,但每次运行该程序时,都会弹出一个错误:
运行时错误:索引4超出“int[e]”类型的界限。

这里的问题是什么

int main(void) {
    printf("How many elements are there in the array?: ");
    int e = get_int();

    int array[e];

    for (int i = 0; i < e; i++) {
        printf("Insert element #%i: ", i + 1);
        array[i] = get_int();
    }

    for (int i = 0; i < e - 1; e++) {
        for (int j = 0; j < e - i - 1; j++) {
            if (array[j] > array[j + 1]) {
                int swap = array[j];
                array[j] = array[j + 1];
                array[j + 1] = swap;
            }
        }
    }
    printf("\n");
}
int main(无效){
printf(“数组中有多少个元素?:”;
int e=get_int();
int数组[e];
for(int i=0;i数组[j+1]){
int swap=数组[j];
数组[j]=数组[j+1];
数组[j+1]=交换;
}
}
}
printf(“\n”);
}

您为循环增量部分键入了
(int i=0;i应该是:

for (int i = 0; i < e - 1; i++)
for(inti=0;i
以下是更正的版本:

#include <stdio.h>

int main(void) {
    printf("How many elements are there in the array?: ");
    int e = get_int();

    for (int i = 0; i < e; i++) {
        printf("Insert element #%i: ", i + 1);
        array[i] = get_int();
    }

    for (int i = 0; i < e - 1; i++) {
        for (int j = 0; j < e - i - 1; j++) {
            if (array[j] > array[j + 1]) {
                int swap = array[j];
                array[j] = array[j + 1];
                array[j + 1] = swap;
            }
        }
    }
    printf("{ ");
    for (int i = 0; i < e; i++) {
        printf("%d, ", array[i]);
    }
    printf("}\n");
    return 0;
}
#包括
内部主(空){
printf(“数组中有多少个元素?:”;
int e=get_int();
for(int i=0;i数组[j+1]){
int swap=数组[j];
数组[j]=数组[j+1];
数组[j+1]=交换;
}
}
}
printf(“{”);
for(int i=0;i
除了chqrlie指出的错误之外,不要使冒泡排序过于复杂(而且它有缺陷,只考虑连续索引)。写得很简单(注意,内部循环经过优化,以避免两次处理“下三角”项):

for(int i=0;i数组[i]){
int swap=数组[j];
数组[j]=数组[i];
数组[i]=交换;
}
}
}

真的吗?您发现该错误消息令人困惑吗?请显示您迄今为止的研究/调试工作。请先阅读第页。请阅读如何产生一个-你需要提供所有的输入和预期的输出太!看起来像在
i==0
,'if(array[j]>array[j+1])`,最后一次迭代会导致问题……用笔和纸检查。您的运行时非常好。其他人会说“运行时错误,代码0x232532464-见鬼去吧”…@Jean Françoisfare:我想我会用
n
而不是
e
。我修复了for循环,但程序的输出搞乱了。如果数组是{5,4,3,2,1},它将输出4,2,3,4。为什么?@chqrlie现在去,值得你的10次重复:)@AshleyMoe你的循环搞乱了。使用i和j,然后上升到n。对于内部循环,从i+1开始,使用两个索引,而不是愚蠢的索引+1@AshleyMoe:您一定输入了错误的修复或输出循环,我得到了正确的结果。@Jean-FrançoisFabre:您也应该得到您的结果,但是上面的代码实现了一种稍微不同的排序算法:选择和冒泡排序的混合。气泡排序仅交换相邻元素。Ashley的版本将元素气泡化到数组的末尾,她也不处理较低的三角形,只是处理一个不同的三角形。请参阅@chqrlie good know(现在我明白了为什么操作代码如此复杂)。我知道我再也不会发明比研究人员已经或将要做的更好的排序了,所以我尽量保持简单:气泡排序或调用一些库:)@Jean-FrançoisFabre:重新实现和调整排序算法是一个非常有趣和令人谦卑的经历。早餐尝试
qsort
或radixsort;-)
for (int i = 0; i < e; i++) {
    for (int j = i+1; j < e; j++) {
        if (array[j] > array[i]) {
            int swap = array[j];
            array[j] = array[i];
            array[i] = swap;
        }
    }
}