#include <stdio.h>
#include<stdlib.h>
void swap(int * pi,int *pj)//交换
{
int temp = *pi;
*pi = *pj;
*pj = temp;
}
void show(int *p,int n)//显示数组状态
{
printf("\n此时状态 ");
for (int i = 0; i < n;i++)
{
printf("%4d", p[i]);
}
}
void quick(int *arr, int iLeft,int iRight )
{
int i = iLeft;//从左边开始 0
int j = iRight + 1;// 从右边开始循环
if (i < j)
{
do
{
///int num[10] = { 10, 9, 20, 19, 13, 8, 9, 22, 0, 91 };
do
{
i++;
} while (arr[i]<= arr[iLeft] && i<=iRight );
//最靠近右边的一个小于等于他的数
do
{
j--;
} while (arr[j] >= arr[iLeft] && j> iLeft);
//最靠近左边大于等于他的数
if (i<j)
{
swap(&arr[i], &arr[j]);//交换
}
show(arr, 10);
} while (i<j);
swap(&arr[iLeft], &arr[j]);//交换
show(arr, 10);
quick(arr, iLeft, j - 1);//分割左边
quick(arr, j + 1, iRight);
}
}
void main()
{
int num[10] = { 10, 9, 20, 19, 13, 8, 9, 22, 0, 91 };
quick(num, 0, 10 - 1);
show(num, 10);
system("pause");
}