【问题标题】:How to understand Merge sort Algorithm(Recursive)如何理解归并排序算法(递归)
【发布时间】:2020-04-01 03:45:03
【问题描述】:
int sort(int a[],int n)
{
     int h;
     int b[n];
     h=n/2
     //copy a[] to b[]
     sort(b,n)
     sort(b+h, n-h)
     //merge two halves in b to a
     return;
}

在该代码中,我如何理解 sort(b,h) sort(b+h,n-h) 部分。 (b+h) 是什么意思??

【问题讨论】:

  • int b[n]; 不是有效的 C++,因为 C++ 不允许变长数组。这只是因为编译器扩展而编译。
  • sort(b,n) 应该是sort(b,h)

标签: c++ sorting mergesort


【解决方案1】:

数组可以衰减为指向第一个元素的指针。事实上,当你将一个数组传递给一个函数而不通过引用传递它时,你实际上是在传递一个指向第一个元素的指针。

在表达式b + h 中,b 衰减为指向第一个元素的指针,而b + h 是指针运算,导致指针指向索引h 处的元素。 sort(b, h)b 指向的元素开始对第一个 h 元素进行排序,这是数组的前半部分。 sort(b + h, n - h)b + h 指向的元素开始对 n - h 元素进行排序,该元素是数组的后半部分。

【讨论】:

    猜你喜欢
    • 2013-10-05
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多