为什么我的QuickSort
工作不正常?这意味着它不会从数组中整理出值。这是我对一个简单的 5 元素数组的输出:
未排序的数组,就可以了:
A[0] = 8
A[1] = 1
A[2] = 45
A[3] = 78
A[4] = 234
但这是一个排序数组,至少根据我的代码:
A[0] = 8
A[1] = 234
A[2] = 45
A[3] = 78
A[4] = 1
和代码
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <time.h>
#include <math.h>
void printOutAnArray(int *A, int n)
{
int i;
for(i=0; i<n; i++)
{
printf("A[%d] = %d\n", i, A[i]);
}
}
void swap(int *i, int *j)
{
int t = *i;
*i = *j;
*j = t;
}
int partition(int A[], int p, int r)
{
int x = A[p];
int i = p;
int j = r+1;
while (true)
{
do j --; while (A[j] <= x);
do i ++; while(A[i] >= x);
if (i < j)
swap(&A[i], &A[j]);
else
return j;
}
}
void Quicksort(int A[], int p, int r)
{
if (p < r)
{
int q = partition(A,p,r);
Quicksort(A, p, q-1);
Quicksort(A, q+1, r);
}
}
int main(int argc, char **argv)
{
int A[] = {8, 1, 45, 78, 234};
int n = 5;
printOutAnArray(A, n);
printf("\n");
Quicksort(A, 0, n-1);
printOutAnArray(A, n);
return 0;
}