问题遇到的现象和发生背景
不知道哪里错了,排序后数组的数据都变了
问题相关代码,请勿粘贴截图
#include <stdio.h>
//中位数选基准值
int Median3(int a[],int left,int right);
//递归主程序
void Quick_sort(int a[],int left,int right);
//面向用户接口
void QuickSort(int a[],int n);
//交换程序
void swap(int *a,int *b);
#include "QuickSort.h"
int Median3(int a[],int left,int right){
int centre = (left + right)/2;
if (a[left] > a[centre]) swap(&a[left],&a[centre]);
if (a[left] > a[right]) swap(&a[left],&a[right]);
if (a[centre] > a[right]) swap(&a[centre],&a[right]);
swap(&a[centre],&a[right-1]); //出于主程序的考虑使用这个技巧
return a[right-1];
}
void Quick_sort(int a[],int left,int right){
int i = left,j = right - 1,pivot = Median3(a,left,right); //left一定小于pivot而right一定大于pivot
if ((right - left) >= 1)
{
while(1)
{
while (a[++i] < pivot);
while (a[--j] > pivot);
if (i < j)
swap(&a[i],&a[j]);
else
break;
}
swap(&a[right - 1],&a[i]);
Quick_sort(a,left,i-1);
Quick_sort(a,i+1,right);
}
}
void QuickSort(int a[],int n){
Quick_sort(a,0,n-1);
}
void swap(int *a,int *b){
int t;
t = *a;
*a = *b;
*b = t;
}
int main(){
int a[7] = {2,5,3,7,5,8,2};
QuickSort(a,7);
//Median3(a,0,6);
for (int i = 0; i < 7; i++)
printf("%d",a[i]);
while(1);
return 0;
}