这个C ++中的快速排序实现有什么问题?

时间:2014-01-04 09:42:37

标签: c++ sorting

以下是我的实施的源代码

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

它给出了一些数组索引的垃圾值。我正在使用数组的第一个元素作为枢轴元素。任何人都可以纠正这个问题吗?

1 个答案:

答案 0 :(得分:2)

替换

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

通过

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

同时找出我们是否需要检查索引i和j是否可以超出数组范围