如题
可以画出图,自行模拟每次排序的操作,终止条件和递归参数
代码:
#include<stdio.h>
void QuickSort(int a[],int N);
int main(){
int a[10] = {5,8,6,1,0,3,4,2,9,7};
QuickSort(a,10);
for (int i = 0; i < 10; ++i) {
printf("%d ",a[i]);
}
return 0 ;
}
void QuickSort(int a[],int N){
if (N < 2){
return;
}
int left = 0;
int right = N - 1;
int temp = a[0];
//int temp2;
int flag = 1;//flag 等于1 从右往左移动,flag = 0从左往右移动
while(left < right){
if (flag == 1 ) {
if (a[right] >= temp) {
right--;
continue;
}
flag = 0;
a[left] = a[right];
left++;
continue;
}
else{
if (a[left] <= temp){
left++;
continue;
}
flag = 1;
a[right] = a[left];
right--;
continue;
}
}
//此时left == right,并且此时left,right指向的位置就是插入temp的位置
a[left] = temp;
QuickSort(a,left);
QuickSort(a + left + 1,N - 1 - left);
}
单击运行▶️
成功!