#include <stdio.h>
int partition(int a[], int first, int end)//划分函数,返回轴值
{
int i = first;
int j = end;
while (i < j)//
{
while (i < j&&a[j] > a[i])//从轴值右边找到一个比轴值大的元素
j--;
if (i < j)//这个值应该在轴值的右边
{
int temp = a[i];//交换,轴值换到右边
a[i] = a[j];
a[j] = temp;
i++;
}
while (i < j&&a[i] <a[j])//从轴值左边找到一个比轴值大的元素
i++;
if (i < j)//这个元素应该在轴值左边
{
int temp = a[i];//轴值换到左边
a[i] = a[j];
a[j] = temp;
j--;
}
}
if(i==j)//返回轴值下标
return i;
}
void quicksort(int a[], int first, int end)//快速排序递归实现
{
if (first < end)//出口为待排元素小于3个,此时子函数first=end
{
int pos = partition(a, first, end);//初始划分,一分为二
quicksort(a, first, pos - 1);//对左边进行划分
quicksort(a, pos + 1, end);//对右边进行划分
}
}
int main()
{
int a[] = { 5,2,9,1,33,7,88,22,4,56,11 };
quicksort(a, 0, 10);
for (int i = 0; i < 11; i++)
printf("%d ", a[i]);
}
08-02
390