2016-04-16 3 views
0

Я пытаюсь написать метод Heapsort, который выполняет только сортировку в пределах заданного диапазона, переданного в метод. Диапазоны низких и высоких пройдены, и эти значения соответствуют значениям внутри кучи, а не индексам кучи. Например, входной массив может быть: 28 10 49 20 59 61 17, а если низкий = 49 и высокий = 61, результирующий массив после Heapsort будет выглядеть так: 28 10 20 49 59 61 17. Значения вне диапазон остается неизменным. У меня уже есть рабочий метод Heapsort, но мой вопрос в том, как изменить этот метод для сортировки в пределах диапазона?Heapsort В пределах заданного диапазона

public static void heapSort(int[] array, int low, int high) 
    {   
     // Build a maxHeap 
     for(int i = array.length/2; i >= 0; i--) 
     { 
      percolateDown(array, i, array.length); 
     } 

     // Heap sort 
     for(int i = array.length - 1; i > 0; i--) 
     { 
      swap(array, 0, i); 
      percolateDown(array, 0, i); 
     } 
    } 

Как вы можете видеть, мой метод принимает низкий и высокий, но в настоящее время ничего не делает с этими значениями. Я попытался сохранить логический флаг, чтобы определить, когда алгоритм находится в диапазоне, и только сортировать, когда это логическое значение истинно. Но это не сработало. Если бы кто-нибудь мог мне помочь, это было бы очень полезно.

Спасибо!

+0

Что вы хотите, это не сортировка. Значения 41, 59 и 61 уже отсортированы в исходном массиве. Вы хотите переставить массив таким образом, чтобы все значения между 49 и 61 были вместе. Неясно, какова должна быть позиция группы. –

+0

Очевидно, что у вас нет интеллекта, чтобы понять, что я хочу сортировать. Вы комментарий даже не имеет смысла, поскольку 41 не является значением, которое я дал в моем примере. Вам действительно нужно подумать, прежде чем делать такой глупый комментарий. –

+0

Нет. Ваш вопрос не имеет смысла. Например, вы говорите, что все значения вне диапазона от 49 до 61 остаются неизменными, но 20 изменяет свою позицию. И подпоследовательность 49, 59 и 61, если она изолирована от значений вне диапазона, уже отсортирована. Мой комментарий не был глупым. Ваш ответ, с другой стороны ... –

ответ

0

Вы можете создать новый массив со значениями только в заданном диапазоне, а затем использовать только массив heapsort. Затем замените элементы исходного массива.

Смежные вопросы