今天在复习排序算法的时候做了快速排序的代码,但是经过编译发现只进行了一次排序,但是我多次检查没有找出自己的错误,不知道自己哪里出现了问题。希望广大的网友能够伸出援助之手。
//快速排序
void QickSort(int nums[N],int left,int right){//只进行了一次排序?
if(left<right){
int temp;
int i=left;
int j=right;
int x=nums[left];//选定第一个数值作为基准
while(i<j){
while(i<j && nums[j]>=x){//找出右边小于基准的数组元素
j--;//指向小于基准的数值
}
while(i<j && nums[i]<=x){//找出左边大于基准的数组元素
i++;//指向大于基准的数值
}
if(i<j){//交换左边大于基准的数值与右边小于基准的数值的位置
temp=nums[j];//存储小于基准的数值
nums[j]=nums[i];
nums[i]=temp;
}
}
//找到基准所在数组的准确位置并且发生交换
nums[left]=nums[i];
nums[i]=x;
QickSort(&nums[N],left,i-1);//左边(小于)基准数组
QickSort(&nums[N],i+1,right); //右边(大于)基准数组
}
}
输入数据:12 18 9 20 13 4
输出结果: 9 12 18 20 13