首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(递归)插入排序中递归结尾处的程序

(递归)插入排序中递归结尾处的程序
EN

Stack Overflow用户
提问于 2020-04-22 12:48:43
回答 1查看 69关注 0票数 0

我试图在C++中递归地实现插入排序。

代码语言:javascript
复制
#include <iostream>
#include <vector>
using namespace std;

vector<int> insertionSort(vector<int>& A,int p,int r)
{ 
    for(auto x=p;x<=r;++x) cout<<A[x]<<' ';
    cout<<endl;  
    if(p<r-1) insertionSort(A,p,r-1);
    cout<<"flag";
    int key=A[r];
    int i=r-1;
    while(i>p)
    {
        if(key<=A[i])
        {
            A[i+1]=A[i];
            i=i-1;
        }
        A[i+1]=key;
    }
    return A;
}

int main()
{
    vector<int> A {22,2,31,41,59,90,11,26,41,58};
    insertionSort(A,0,A.size()-1);
    for(auto x:A) cout<<x<<' ';
    cout<<endl;
}

输出:

22 2 31 41 59 90 11 26 41 58

22 2 31 41 59 90 11 26 41

22 2 31 41 59 90 11 26

22 2 31 41 59 90 11

22 2 31 41 59 90

22 2 31 41 59

22 2 31 41

22 2 31

22 2

^C⏎

如您所见,它会在递归结束时被卡住(它不会超过标志语句),我不得不手动退出执行。如果我的理解是正确的,当递归到达其结束时,下一个语句将在每个调用堆栈中执行。请帮我解决这个问题。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2020-04-22 14:36:13

谢谢大家的有益评论。就像他们说的那样,程序似乎被卡住了,因为当if块没有被执行时,出现了一个无限循环。因此,我添加了一个break,并将插入语句放在while块之外。以下是修正后的代码:

代码语言:javascript
复制
vector<int> insertionSort(vector<int>& A,int p,int r)
{   
    if(p<r-1) insertionSort(A,p,r-1);
    int key=A[r];
    int i=r-1;
    while(i>=p)
    {
        if(key<A[i])
        {
            A[i+1]=A[i];
            i=i-1;
        }
        else break;
    }
    A[i+1]=key;
    return A;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61365564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档