函数部分是拿的别人网课的,应该没问题,但为什么就得不出正确的结果,我写的主函数不知哪里有错,求教
#include
#include
#define ElementType int
void Swap(ElementType * a, ElementType* b)
{
ElementType t = a; *a = *b; *b = t;
}
//选出一个不大不小的数
ElementType Median3(ElementType A[], int Left, int Right)
{
int Center = (Left + Right) / 2;
if (A[Left] > A[Center])
Swap(&A[Left], &A[Center]);
if (A[Left] > A[Right])
Swap(&A[Left], &A[Right]);
if (A[Center] > A[Right])
Swap(&A[Center], &A[Right]);
/ 此时A[Left] <= A[Center] <= A[Right] /
Swap(&A[Center], &A[Right - 1]); / 将基准Pivot藏到右边*/
/* 只需要考虑A[Left+1] … A[Right-2] /
return A[Right - 1]; / 返回基准Pivot /
}
//快排实现过程
void Qsort(ElementType A[], int Left, int Right)
{ / 核心递归函数 */
int Pivot, Cutoff, Low, High;
Pivot = Median3(A, Left, Right); /* 选基准 */
Low = Left; High = Right - 1;
while (1) { /*将序列中比基准小的移到基准左边,大的移到右边*/
while (A[++Low] < Pivot);
while (A[--High] > Pivot);
if (Low < High) Swap(&A[Low], &A[High]);
else break;
}
Swap(&A[Low], &A[Right - 1]); /* 将基准换到正确的位置 */
Qsort(A, Left, Low - 1); /* 递归解决左边 */
Qsort(A, Low + 1, Right); /* 递归解决右边 */
}
//优化接口
void QuickSort(ElementType A[], int N)
{ /* 统一接口 */
Qsort(A, 0, N - 1);
}
//输出函数
void print_array(int arr[], int size) {
for (int i = 0; i < size; i++)
printf("%d ", arr[i]);
printf("\n");
}
int main() {
int arr[] = { 34,65,12,43,67,5,78,10,3,70 };
int len = sizeof(arr) / sizeof(int);
//输出 原来的序列
printf("First array is \n");
print_array(arr, 10);
QuickSort(arr, 10);
//输出排序完的序列
printf("\nSorted array is \n");
print_array(arr, 10);
return 0;
}