#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;//从左边开始循环
int j = iRight + 1;//从右边开始循环
if (i < j)//如果左边小于右边
{
do
{
do
{
i++;
} while (arr[i] <= arr[iLeft] && i < iRight);
//从左向右找第一个大于arr[iLeft]的数
do
{
j--;
} while (arr[j] >= arr[iLeft] && j>iLeft);
//从右向左找第一个小于arr[iLeft]的数
//如果大数的位置小于小数的位置则进行交换
if (i < j)
{
swap(&arr[i], &arr[j]);
}
//这一步的目的是把大的数都放在右边
} while (i < j);//一直循环到i>=j 说明已经已经折中分好了 此时j保存的是小于arr[iLeft]的数所以要和arr[iLeft]交换
swap(&arr[iLeft], &arr[j]);
//j是分界点,快速排序 左边的 以及右边的
quick(arr, iLeft, j - 1);
quick(arr, j + 1, iRight);
}
}
void main()
{
int num[10] = { 10, 9, 20, 19, 1, 8, 9, 22, 0, 91 };
quick(num, 0, 9);
show(num, 10);
system("pause");
}