Реферат: Сортировка данных в массиве
scanUp++;
После позиционирования scanUp индекс scanDown продвигается вниз по списку, пока не встретится элемент, меньший или равный центральному.
while (pivot < A[scanDown]) scanDown--; |
По окончании этого цикла (и при условии что scanUp < scanDown) оба индекса адресуют два элемента, находящихся не в тех подсписках. Эти элементы меняются местами.
Swap(A[scanUp], A[scanDown]); |
Обмен элементов прекращается, когда scanDown становится меньше, чем scanUp. В этот момент scanDown указывает начало левого подсписка, который содержит меньшие или равные центральному элементы. Индекс scanDown становится центральным. Взять центральный элемент из A[low]:
Swap(A[low], A[scanDown]); |
Для обработки подсписков используется рекурсия. После обнаружения точки разбиения мы рекурсивно вызываем QuickSort с параметрами low, mid-1 и mid+1, high. Условие останова возникает, когда в подсписке остается менее двух элементов, так как одноэлементный или пустой массив упорядочивать не нужно.
// Swap меняет местами элементы массива. Соответствующий тип данных // должен поддерживать операцию «=». template <class T> void Swap(T & el1, T & el2) { T tmp = el1; el1 = el2; el2 = tmp; } // QuickSort принимает в качестве параметров массив // и предельные значения его индексов template <class T> void QuickSort(T A[], int low, int high) { // локальные переменные, содержащие индекс середины - mid, // центральный элемент и индексы сканирования T pivot; int scanUp, scanDown; int mid; // если диапазон индексов не включает в себя // как минимум два элемента, завершить работу if(high - low <= 0) К-во Просмотров: 595
Бесплатно скачать Реферат: Сортировка данных в массиве
|