C++中的归并排序
Merge sort in c++
在竞争性编码中,我遇到了编码合并排序的问题
我知道如何使用三个参数编写合并排序代码,即
merge_sort(int arr[],int left,int right)
{
\rest of code
}
但问题是
merge_sort(int arr[],int size)
{
\rest of code
}
如何对 2 个参数执行归并排序?
你可以调用这个函数
merge_sort(int arr[],int size)
{
\rest of code
}
来自这个函数
merge_sort(int arr[],int left,int right)
{
\rest of code
}
喜欢
merge_sort( arr + left, right - left + 1 );
在这种情况下,相对于第二个函数,参数 left
将等于 0
,而参数 right 将等于 right - left + 1
,因为将指针移动到所需的位置数组的一部分。
所以第一个函数可以通过使用适当的参数和指针算法来替换第二个函数。
或者可以从第一个函数调用第二个函数,如
merge_sort( arr, 0, size - 1 );
你可以这样做:
merge_sort(int arr[],int size)
{
merge_sort(arr, 0,size-1) // merge_sort(int arr[],int left,int right)
}
现在你从第 2 个参数调用第 3 个参数的函数。
int arr[]
看起来像一个数组,但实际上不是。请记住,当传递给函数时,数组会衰减为指向第一个元素的指针。第一种方法使用:
-------------------------------------
| | |
arr(pointer) left(index) right(index)
虽然第二个可以做同样的事情:
-------------------------------------
|<-- size -->|
arr
在竞争性编码中,我遇到了编码合并排序的问题 我知道如何使用三个参数编写合并排序代码,即
merge_sort(int arr[],int left,int right)
{
\rest of code
}
但问题是
merge_sort(int arr[],int size)
{
\rest of code
}
如何对 2 个参数执行归并排序?
你可以调用这个函数
merge_sort(int arr[],int size)
{
\rest of code
}
来自这个函数
merge_sort(int arr[],int left,int right)
{
\rest of code
}
喜欢
merge_sort( arr + left, right - left + 1 );
在这种情况下,相对于第二个函数,参数 left
将等于 0
,而参数 right 将等于 right - left + 1
,因为将指针移动到所需的位置数组的一部分。
所以第一个函数可以通过使用适当的参数和指针算法来替换第二个函数。
或者可以从第一个函数调用第二个函数,如
merge_sort( arr, 0, size - 1 );
你可以这样做:
merge_sort(int arr[],int size)
{
merge_sort(arr, 0,size-1) // merge_sort(int arr[],int left,int right)
}
现在你从第 2 个参数调用第 3 个参数的函数。
int arr[]
看起来像一个数组,但实际上不是。请记住,当传递给函数时,数组会衰减为指向第一个元素的指针。第一种方法使用:
-------------------------------------
| | |
arr(pointer) left(index) right(index)
虽然第二个可以做同样的事情:
-------------------------------------
|<-- size -->|
arr