快速排序 数组实现
快速排序的基本方法是在n个元素中任取一个元素(本代码取第一个元素)作为基准,将该基准放入正确位置,小于基准的数据组成的子序列放在左侧,大于基准的数组组成的子序列放在右侧。(即Partition函数)对两个子序列重复上述操作,直至每个子序列只有一个元素或空为止。(即QuickSort函数)
时间复杂度:O(nlogn)
#include<stdio.h>
void disp(int a[],int n)//进行交换的一个函数
{
int i;
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("\n");
}
int Partition(int a[],int s,int t)//核心操作
{
int i=s,j=t;
int tmp=a[s];//将基准定在数组首个元素
while(i!=j)
{
while(j>i&&a[j]>=tmp)
j--;//右指针左移,相比左指针,右必须先移动
a[i]=a[j];//已被tmp保存值的位置,放入右侧违规值
while(i<j&&a[i]<=tmp)
i++;//左指针右移
a[j]=a[i];//左侧违规值放入右侧空余位置
}
a[i]=tmp;//基准值进入正确位置
return i;
}
void QuickSort(int a[],int s,int t)//进行递归
{
if(s<t)
{
int i=Partition(a,s,t);
QuickSort(a,s,i-1);
QuickSort(a,i+1,t);
}
}
void main()
{
int n;
int a[100];
int x=0;
printf("how many numbers\n");
printf("the numbers\n");
scanf("%d\n",&n);
for(;x<n;x++)
{
scanf("%d",&a[x]);
}
QuickSort(a,0,n-1);
disp(a,n);
}