Сортировка слиянием в c ++ - PullRequest
1 голос
/ 27 мая 2020

В конкурентном кодировании у меня возник вопрос о сортировке слиянием кода. Я знаю, как кодировать сортировку слиянием с тремя аргументами. ie

merge_sort(int arr[],int left,int right)
{
     \\rest of code
}
* 1003 выполнить сортировку слиянием для 2 аргументов?

Ответы [ 3 ]

3 голосов
/ 27 мая 2020

Вы можете вызвать эту функцию

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 из-за перемещения указателя на требуемую часть массива.

Таким образом, первая функция может заменить вторую функцию, используя соответствующие аргументы и арифметика указателя c.

Или вторая функция может быть вызвана из первой функции, например

merge_sort( arr, 0, size - 1 );
2 голосов
/ 27 мая 2020

int arr[] выглядит как массив, но это не так. Помните, что массивы распадаются на указатели на первый элемент при передаче в функции. Первый метод использует:

-------------------------------------
|                 |             |
arr(pointer)      left(index)   right(index)

В то время как второй может сделать то же самое с:

-------------------------------------
                  |<-- size  -->|
                  arr          
2 голосов
/ 27 мая 2020

Вы можете просто сделать это:

merge_sort(int arr[],int size)
{
     merge_sort(arr, 0,size-1) // merge_sort(int arr[],int left,int right)
}

Теперь вы вызываете функцию с тремя аргументами из первого с двумя аргументами.

...