Рекурсивная сортировка элементов массива
Код рекурсивной сортировки элементов массива представлен ниже:
// фукнция сортировки
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);
}