сортировка — Что не так с этой быстрой реализацией сортировки в C ++?

Вот исходный код моей реализации

#include <iostream>
using namespace std;

int partition (int arr[], int l, int h)
{

int pivot = arr[l];
int i=l;
int j=h;

while (i<j)
{
while(arr[i] <= pivot) ++i;
while(arr[j] > pivot) --j;
if (i>=j) break;

swap(arr[i], arr[j]);
}
swap(arr[j], arr[0]);

return j;

}

/* A[] --> Array to be sorted, l  --> Starting index, h  --> Ending index */
void quickSort(int A[], int l, int h)
{
if (l < h)
{
int p = partition(A, l, h); /* Partitioning index */
quickSort(A, l, p - 1);
quickSort(A, p + 1, h);
}
}

void printArr( int arr[], int n )
{
int i;
for ( i = 0; i < n; ++i )
printf( "%d ", arr[i] );
}
// Driver program to test above functions
int main()
{
int arr[] = {4, 5, 2, 1, 3, 2, 3};
int n = sizeof( arr ) / sizeof( *arr );
quickSort( arr, 0, n - 1 );
printArr( arr, n );
return 0;
}

Это дает значение мусора для некоторого индекса массива. Я использую первый элемент массива в качестве основного элемента. Кто-нибудь может исправить проблему?

0

Решение

Заменить линию

swap(arr[j], arr[0]);

от

swap(arr[j], arr[l]);

Также выясните, нужно ли проверять, могут ли индексы i и j идти вне границ массива

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector