算法思想:在数组中选择一个基准数,将数组中小于基准数的数移到基准数左边,大于的移到右边。
(1)i j分别指向数组的头和尾,通常选数组第一个元素作为基准数
int i=low,j=high,t=a[low];
(2)先比较j,如果j大于等于基准数,j--继续与基准数比较,否则再看i;
while(a[j]>=t&&j>i)
{
j--;
}
(3)如果i小于等于基准数i++继续与基准数比较,否则与j交换元素
while(a[i]<=t&&j>i)
{
i++;
}
temp=a[i];
a[i]=a[j];
a[j]=temp;
(4)当i=j时,将i与基准数互换,这一轮比较结束。
a[low]=a[i];
a[i]=t;
(5)基准数左右两部分分别重复以上操作。
quick_sort(a,low,i-1);
quick_sort(a,i+1,high);
代码如下:
#include <stdio.h>
#include <stdlib.h>
void quick_sort(int a[],int low,int high)
{
int i=low,j=high,t=a[low];
int temp;
if(i>j)
return;
while(j>i)
{
while(a[j]>=t&&j>i)
{
j--;
}
while(a[i]<=t&&j>i)
{
i++;
}
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
a[low]=a[i];
a[i]=t;
quick_sort(a,low,i-1);
quick_sort(a,i+1,high);
}
int main()
{
int i,n;
int a[10]={0};
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
quick_sort(a,0,n-1);
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
}
运行结果: