#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void printf_array(int[],int);
void QuickSort(int[],int,int);
int main()
{
int a[] = { 5,1,3,10,4,8,7,9,2,6};
int len = sizeof(a)/4;
QuickSort(a,0,len-1);
printf_array(a,len);
system("pause");
return 0;
}
void QuickSort(int a[],int left,int right)
{
//L左下标,R右下标,P中间值
int L = left, R = right;
int P = a[L];
//递归终止条件
if (L >= R)return;
//L与R不交叉对a进行两端扫描
while (L<R)
{
//先从右端往左开始扫描
//如果右边的值大于中间值且左右下标不重合,则右下标一直往左移
while (a[R]>P && L<R)
{
R--;
}
//否则此右值换到左边,随后从左下标开始往右扫描
a[L] = a[R];
//将中间值置于两下标重合处
if (L == R)
{
a[L] = P;
break;
}
//从左端往右开始扫描
//如果左边的值小于中间值且左右下标不重合,则左下标一直往右移
while (a[L]<P && L<R)
{
L++;
}
//否则此左值换到右边,随后从右下标开始往左扫描
a[R] = a[L];
//将中间值置于两下标重合处
if (L == R)
{
a[R] = P;
break;
}
}
//printf("L=%d\n", L);
//printf("R=%d\n", R);
//printf("P=%d\n", P);
QuickSort(a, left, L-1);
QuickSort(a, L+1,right);
}
void printf_array(int a[],int len)
{
for (int i = 0;i <= len - 1;i++)
{
if (i != len - 1)
{
printf("%d ", a[i]);
}
else
{
printf("%d\n", a[i]);
}
}
}
02-02
7701
12-09
723