Рекурсивная сортировка элементов массива
|
Код рекурсивной сортировки элементов массива представлен ниже:
// фукнция сортировки void QuickSort(double* array, int a, int b) { int A = a; int B = b; double mid;
if ( b > a) {
// Находим разделительный элемент в середине массива mid = array[ ( a + b ) / 2 ];
// Обходим массив while( A <= B ) { /* Находим элемент, который больше или равен * разделительному элементу от левого индекса. */ while( ( A < b ) && ( array[A] < mid )) ++A;
/* Находим элемент, который меньше или равен * разделительному элементу от правого индекса. */ while( ( B > a ) && ( array[B] > mid )) --B;
// Если индексы не пересекаются, меняем if( A <= B ) { double T; T = array[A]; array[A] = array[B]; array[B] = T;
++A; --B; } }
/* Если правый индекс не достиг левой границы массива, * нужно повторить сортировку левой части. */ if( a < B ) QuickSort( array, a, B );
/* Если левый индекс не достиг правой границы массива, * нужно повторить сортировку правой части. */ if( A < b ) QuickSort( array, A, b );
} }
void QuickSort(double* array, int n) { QuickSort(array, 0, n-1); } |