#include <stdio.h>
#include <stdlib.h>
void swap(int *array,int i,int j)
{
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
void quicksort(int *array,int a,int b)
{
int i = a,j = b+1;
while(1)
{
do
{
i ++;
}while(array[i] <= array[a]);//从左往右找到比第一个数更大的数
do
{
j --;
}while(array[j] > array[a]);//从右往左找到比第一个数更小的数
if(i > j) {swap(array,a,j); break;}//遍历完成交换第一个数和找到的正确坐标
else swap(array,i,j);//交换i,j两个位置的数
}
if(j-1 > a) quicksort(array,a,j-1);//递归解决前半部分
if(j+1 < b) quicksort(array,j+1,b);//递归解决后半部分
}
int main()
{
int a[12] = {2,5,3,1,6,15,23,5,8,9,6,12};
quicksort(a,0,11);
for(int i = 0;i < 12;i ++)
{
printf("%d ",a[i]);
}
return 0;
}
运行结果如图: