增加堆栈不起作用 如何正确地增加程序的可用堆栈,或者使用流血DEV C++或代码::块?我正在运行简单的bubble和快速排序,但当我在Code::Block中更改堆栈时(发现如何结束),它使我的程序崩溃得更快,尽管使用的空间远远超过了建议的空间。最初,程序在对64K个随机整数排序时崩溃(使用rand()函数)。现在,它以32K的速度崩溃。我收到错误:进程返回-1073741571(0xc0000fd)

增加堆栈不起作用 如何正确地增加程序的可用堆栈,或者使用流血DEV C++或代码::块?我正在运行简单的bubble和快速排序,但当我在Code::Block中更改堆栈时(发现如何结束),它使我的程序崩溃得更快,尽管使用的空间远远超过了建议的空间。最初,程序在对64K个随机整数排序时崩溃(使用rand()函数)。现在,它以32K的速度崩溃。我收到错误:进程返回-1073741571(0xc0000fd),c++,sorting,compiler-construction,stack,bubble-sort,C++,Sorting,Compiler Construction,Stack,Bubble Sort,如果我做得对的话,程序在不改变堆栈的情况下运行得更快gcc-Wl,--stack,109951162776 我根本不知道如何在devc中更改它++ 我该怎么办? 有没有办法改变代码本身中的堆栈? 下面是我用于冒泡和快速排序的代码。每个都有两个:一个是向量,另一个是数组。我认为是泡沫型的。应该是正确的。快速排序,我不太确定。对不起,有点乱 vector <int> v_bubble(vector <int> array){ // Vector Bubble Sort

如果我做得对的话,程序在不改变堆栈的情况下运行得更快<代码>gcc-Wl,--stack,109951162776

我根本不知道如何在devc中更改它++

我该怎么办? 有没有办法改变代码本身中的堆栈? 下面是我用于冒泡和快速排序的代码。每个都有两个:一个是向量,另一个是数组。我认为是泡沫型的。应该是正确的。快速排序,我不太确定。对不起,有点乱

vector <int> v_bubble(vector <int> array){
    // Vector Bubble Sort
    if (array.size() < 2){
        return array;
    }
    int s = 1;
    while (s){
        s = 0;
        for (unsigned int x = 0; x < (array.size() - 1); x++){
            if (array[x] > array[x + 1]){
                int t = array[x];
                array[x] = array[x + 1];
                array[x + 1] = t;
                s = 1;
            }
        }
    }
    return array;
}

void a_bubble(int array[], int size){
    // Array Bubble Sort
    int s = 1;
    while (s){
        s = 0;
        for (int x = 0; x < (size - 1); x++){
            if (array[x] > array[x + 1]){
                int t = array[x];
                array[x] = array[x + 1];
                array[x + 1] = t;
                s = 1;
            }
        }
    }
}

vector <int> v_quick(vector <int> array){
    //Vector Quick Sort
    if (array.size() < 2){
        return array;
    }
    vector <int> left;
    vector <int> right;
    int p_location = array.size() / 2 - 1;
    int pivot = array[p_location];
    for(unsigned int x = p_location; x < array.size() - 1; x++){
        array[x] = array[x + 1];
    }
    array.pop_back();
    for(unsigned int x = 0; x < array.size(); x++){
        if (array[x] <= pivot) {
            left.push_back(array[x]);
        }
        else if (array[x] > pivot){
            right.push_back(array[x]);
        }
    }
    vector <int> p;
    p.push_back(pivot);
    return combine(combine(v_quick(left), p), v_quick(right));
}

int a_quick(int array[], int size, int l_index = -1, int r_index = -1){
    //Array Quick Sort
    if (size < 2){
        return array[size];
    }
    array[size] = array[size];
    int left[size];
    int right[size];
    l_index = 0;
    r_index = 0;
    int p_location = size / 2 - 1;
    int pivot = array[p_location];
    for(int x = p_location; x < size - 1; x++){
        array[x] = array[x + 1];
    }
    size--;
    for(unsigned int x = 0; x < size; x++){
        if (array[x] <= pivot) {
            left[l_index] = array[x];
            l_index++;
        }
        else if (array[x] > pivot){
            right[r_index] = array[x];
            r_index++;
        }
    }
    return a_quick(left, l_index, l_index, r_index) + pivot + a_quick(right, r_index, l_index, r_index);
}
向量v_气泡(向量数组){
//向量冒泡排序
if(array.size()<2){
返回数组;
}
int s=1;
而{
s=0;
for(无符号整数x=0;x<(array.size()-1);x++){
if(数组[x]>数组[x+1]){
int t=数组[x];
数组[x]=数组[x+1];
数组[x+1]=t;
s=1;
}
}
}
返回数组;
}
作废一个气泡(整数数组[],整数大小){
//数组冒泡排序
int s=1;
而{
s=0;
对于(int x=0;x<(大小-1);x++){
if(数组[x]>数组[x+1]){
int t=数组[x];
数组[x]=数组[x+1];
数组[x+1]=t;
s=1;
}
}
}
}
矢量v_快速(矢量阵列){
//矢量快速排序
if(array.size()<2){
返回数组;
}
向量左;
向量权;
int p_location=array.size()/2-1;
int pivot=数组[p_位置];
for(无符号int x=p_位置;x
代码的其余部分只是生成包含32、64和128K条目的数组和向量,使用上述代码对它们进行排序并返回时间。那部分我很确定我没有搞砸

我的主要任务就是

    start = clock();
    a_quick(array1, 32000);
    end = clock();
    cout << "\nQuick Sort\tArray\t32000\t" << ((double) end - start)/CLOCKS_PER_SEC << " seconds\n";
start=clock();
a_quick(阵列1,32000);
结束=时钟();

cout除非您是为内存非常有限的嵌入式环境编程,否则我怀疑您的排序实现中存在导致堆栈溢出的递归错误。除非您处理的是真正庞大(许多GB)的阵列,否则不需要更改堆栈大小


想在函数
inta_bubble(int-array[],int-size)
中发布一些代码吗?

:返回
array[size]
,这超出了范围。这同样适用于
a_quick()

请同时发布您的
main()

编辑:否,它返回在数组的最后一个元素之后的元素。有些人可能会说,即使访问它也是UB,他们是对的

您正在运行的是调试版本吗?我认为错误代码对应于“越界异常”,但我不明白为什么它必须如此神秘


EDIT2:更糟。什么
int array[1您是如何实现这些算法的?正确的冒泡排序实现不应该是递归的,而正确的递归快速排序实现应该要求调用堆栈上的平均O(lg n)深度(如果您没有选择好的轴心值,或者您的数据确实不正确,那么最糟糕的情况是空间复杂性在技术上是线性的)。如果使用递归算法时堆栈上的空间不足,最好的办法是以迭代形式重新实现它,或者使用您自己可以在堆上分配的堆栈伪造递归。我认为我做的冒泡排序是正确的。快速排序我今天刚学过,所以我不太确定。在我的硬件说明中,它特别指出至少,我需要更改堆栈。您显示的函数不可能导致堆栈上的空间不足。它们都不调用任何函数,也不在堆栈上分配任何大对象。请注意,
v_bubble
即使对于少量元素也不能给出正确的结果,并且不能正确地使用堆栈处理一个空的
std::vector
.oops.你知道什么是崩溃吗?我很怀疑代码中显示完成排序需要多长时间的部分我该如何修复它?我会给数组一个大的初始大小吗?@calccrypto:不,你没有返回数组;你返回的是
大小
-th元素由于索引
大小
(根据定义)处没有元素,因此结果未定义。我的a_泡泡现在好点了吗?至于我正在运行的程序,我只需按一下