快速排序主要是利用了二分的思想进行排序,时间复杂度是NlogN;
算法实现:
首先选出一个基准数(这里选a[0]做基准数),将比基准数小的都放到左边,大的就放到右边;
此处的实现我利用两个哨兵i、j,i从数组的左边开始,j从数组的右边开始;
当a[i]小于或等于基准数,i自加1,直到a[i]>基准数,
j也做同样的操作,只是改掉大小关系;
等到a[i],a[j]都满足关系了,将a[i],a[j]位置互换;
重复上述操作,直到i=j;
将基准数与a[i]调换;
再递归的对左右进行排序。
#include<stdio.h>
#include<stdlib.h>
void Swap(int *a,int *b)
{
int tmp;
tmp=*a;
*a=*b;
*b=tmp;
}
void quicksort(int a[],int left,int right)
{
int i,j,t,tmp;
if(left>right)
return;
tmp=a[left];
i=left,j=right;
while(i!=j)
{
while(a[j]>=tmp&&i<j) j--;
while(a[i]<=tmp&&i<j) i++;
if(i<j)
Swap(&a[i],&a[j]);
}
Swap(&a[i],&a[left]);
quicksort(a,left,i-1);
quicksort(a,i+1,right);
}
int main()
{
int arr[10];
int i=0;
for(i=0;i<10;i++)
{
scanf("%d",&arr[i]);
}
int left=0,right=9;
quicksort(arr,left,right);
for(i=0;i<10;i++)
{
printf("%d ",arr[i]);
}
system("pause");
return 0;
}