发 帖  
原厂入驻New
[问答] 请问我这个快速排序怎么就死循环了呢?
340 STM32F407
分享
2019-11-27 17:24:46   评论 分享淘帖 邀请回答
7个回答
你说的是重启了,不是死循环;
你这个是递归调用,我认为是堆栈溢出了
你试试数组的长度小的时候应该没事,到一定数量就不行了
最佳答案
2019-11-27 17:24:47 4 评论

举报

4 条评论
这个不懂,帮顶 坐等大神解答
2019-11-27 18:12:02 1 评论

举报

1 条评论
  • 2019-11-27 20:00

    也能循环到这个函数,也能排序,但是就是排了几次序之后,CPU就重启了,我用的stm32f407

2019-11-27 21:20:49 1 评论

举报

1 条评论
本帖最后由 lm12041204a 于 2019-11-27 22:28 编辑

C代码,都是相通的,具体语法有点差别。
#include <stdio.h>
int a[101],n;//定义全局变量,这两个变量需要在子函数中使用
void quicksort(int left, int right) {
    int i, j, t, temp;
    if(left > right)
        return;
    temp = a[left]; //temp中存的就是基准数
    i = left;
    j = right;
    while(i != j) { //顺序很重要,要先从右边开始找
        while(a[j] >= temp && i < j)
            j--;
        while(a <= temp && i < j)//再找右边的
            i++;      
        if(i < j)//交换两个数在数组中的位置
        {
            t = a;
            a = a[j];
            a[j] = t;
        }
    }
    //最终将基准数归位
    a[left] = a;
    a = temp;
    quicksort(left, i-1);//继续处理左边的,这里是一个递归的过程
    quicksort(i+1, right);//继续处理右边的 ,这里是一个递归的过程
}
int main() {
    int i;
    //读入数据
    scanf("%d", &n);
    for(i = 1; i <= n; i++)
        scanf("%d", &a);
    quicksort(1, n); //快速排序调用
    //输出排序后的结果
    for(i = 1; i < n; i++)
        printf("%d ", a);
    printf("%d\n", a[n]);
    return 0;
}


2019-11-27 22:25:41 评论

举报

你看一下函数QuickSort(int array[], int left, int right) 的第一参数,数组array[],是什么传递方式?
“值传递”?
我不清楚你用的语言和环境,如果是C/C++,这个参数是值传递,
在被调用函数内是另外一个副本,你的代码中,被调用函数内的变化是无法传递出去的,无法影响到调用者。
上面的示例中,为了方便使用了全局数组,函数递归调用中的变动都会体现在这个数组中。
另外,也可以使用指针或者引用之类的方式。
2019-11-28 09:43:44 1 评论

举报

1 条评论
如楼上所说的递归调用问题,C语言好像是不支持递归调用的,这样的话堆栈肯定会溢出的
2019-11-28 10:49:38 评论

举报

我怎么看不见你的结束标志,你的last等于多少时退出程序?
2019-11-28 10:53:28 1 评论

举报

1 条评论

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

我要提问
关闭

站长推荐 上一条 /10 下一条

快速回复 返回顶部 返回列表