以下是我的实施的源代码
#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 :(得分:2)
替换
行swap(arr[j], arr[0]);
通过
swap(arr[j], arr[l]);
同时找出我们是否需要检查索引i和j是否可以超出数组范围