快速排序的思想就是分治法。 选取一个基准元,将数组分割,然后将大于等于该基准元的数放到该数右边,小于等于的数放到左边。
(1)固定的基准元选取,第一个数或最后一个数
#include<stdio.h>
void quicksort(
int a[
1000],
int l,
int r)
{
if(l>r)
return;
int i,j,x,t;
i=l,j=r,x=a[l];
while(i<j)
{
while(j>i&&a[j]>=x)
j--;
a[i]=a[j];
while(i<j&&a[i]<=x)
i++;
a[j]=a[i];
}
a[i]=x;
quicksort(a,l,i-
1);
quicksort(a,i+
1,r);
}
int main()
{
int a[
1000],i,n;
while(~
scanf(
"%d",&n))
{
for(i=
0;i<n;i++)
scanf(
"%d",&a[i]);
quicksort(a,
0,n-
1);
for(i=
0;i<n;i++)
printf(
"%d ",a[i]);
putchar(
'\n');
}
return 0;
}
这种方法选取的基准元对于随机数组数组较快
参考:http://www.codeceo.com/article/3-sort-quick-sort-improve.html
转载请注明原文地址: https://ju.6miu.com/read-16935.html