Базовое условие в сортировке слиянием - PullRequest
3 голосов
/ 16 декабря 2011

Я пытаюсь реализовать сортировку слиянием, и у меня возникают проблемы с реализацией базового условия.

У меня есть функция merge, которая принимает два отсортированных массива и возвращает объединенный массив.1005 *

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

private static int[] mergeSort(int[] a, int low , int high)
{
    int mid = (low + high)  /2;
    if (low  < high)
    {
        return  merge( mergeSort(a,low, mid-1), mergeSort(a, mid , high));
    }
    return //return what ?
}

Какое базовое условие здесь?Какую ошибку я делаю?

Ответы [ 3 ]

2 голосов
/ 16 декабря 2011

Базовое условие - это когда у вас есть один элемент списка a, который по определению уже отсортирован.Просто верни его.

1 голос
/ 16 декабря 2011

У метода сортировки есть два условия возврата:

  • базовое условие - массив содержит только один элемент
  • объединенное условие - два отсортированных массива были объединены

Метод слияния должен принимать два отсортированных массива и возвращать один отсортированный массив.

public int[] sort(int[] input){
  int mid = input.length/2;
  if(input.length > 1){
    // create and populate left and right arrays to merge
    // left  => input[0   > mid-1]
    // right => input[mid > input.length]
    return merge(sort(left), sort(right));
  }
  return input;
}

public int[] merge(int[] left, int[] right){
  // your merge logic
}
0 голосов
/ 16 декабря 2011

Просто верните a, поскольку оно уже отсортировано (оно содержит не более одного элемента).

...