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

0

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

#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;
}

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

Теги:
sorting

1 ответ

2

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

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

от

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню