算法小白的学习
-
第二天-快速排序
#include<stdio.h>
int a[100],n;
void quickshort(int left,int right)
{
int i,j,temp,t;
if(left>right)
{
return ;
}
temp=a[left];//temp 中存的是基数
i=left;
j=right;
while(i!=j)
{
while(a[j]>=temp && i<j)//先从右边找小于temp的,即基数
{
j–;
}
while(a[i]<=temp && i<j)//从左边找大于temp的,即基数
{
i++;
}
//找到之后进行交换
if(i<j)//当哨兵还没有相遇的时候
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
//当哨兵相遇的时候,将基数归位a[left]=a[i]; a[i]=temp; quickshort(left,i-1);//递归执行剩下未归位的数 quickshort(i+1,right);
}
int main(){
int i,j,t;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
quickshort(1,n);
for(i=1;i<=n;i++)
{
printf("%d ",a[i]);
}
getchar();
getchar();
return 0;
}
结果如图: