首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并排序基例

合并排序基例
EN

Stack Overflow用户
提问于 2020-10-18 10:44:08
回答 3查看 351关注 0票数 2

我在练习排序算法,我被困在这个愚蠢的问题上。

我特别不明白如何将数组划分为只包含单个(排序)元素的数组。我拿出了一个调用堆栈的例子来说明我的困惑。

代码语言:javascript
复制
void merge_sort(int A[], int start, int end) {
    if (start < end) {
        int mid = (start + end ) / 2;
        merge_sort(A, start, mid);                 
        merge_sort(A, mid + 1, end);
        merge(A, start, mid, end);   
    }                    
}

调用堆栈应该如下所示

merge_sort(A,0,5) A 9,7,8,3,2,1

merge_sort(A,0,2) A9,7,8

merge_sort(A,0,1) A9,7

merge_sort(A,0,0) ->这里的基本情况会失败,不是吗?

在这种情况下,数组不会被划分为单例数组。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-10-18 10:59:02

start == end时,它意味着只有一个元素可以“排序”。

由于start == end还意味着start < end将为false,因此函数跳过if主体中的所有内容。

所以merge_sort(A,0,0)什么也不做,但是将调用堆栈返回给merge_sort(A,0,1)

具体而言,查看merge_sort(A, 0, 1)调用如下所示:

代码语言:javascript
复制
merge_sort(A, 0, 1)
    merge_sort(A, 0, 0)  // Does nothing
    merge_sort(A, 1, 1)  // Does nothing
    merge(A, 0, 0, 1)    // Merge the two partition 0-0 with 1-1

因此,一旦merge_sort(A, 0, 0)返回(不做任何操作),则调用merge_sort(A, 1, 1),它只会返回。然后这两个子数组将与merge(A, 0, 0, 1)“合并”。

票数 1
EN

Stack Overflow用户

发布于 2020-10-18 10:52:07

merge_sort(A,0,0)的递归调用会立即返回,因为left == right ie:带有单个元素的片。

票数 0
EN

Stack Overflow用户

发布于 2020-10-18 10:55:05

基大小写将返回原因start == end而不是start < end

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64412356

复制
相关文章

相似问题

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