今天 看书(大话数据结构),做总结:
写了两个题,是之前没写出来的,根据别人的提示然后改了过了。
快排
刚开始我按照啊哈算法上面写只对了一点,我觉得非常的奇怪,然后问了别人才知道模板的基准数都是固定的没变,如果把最大数放到第一个就没有意义了,为了防止这种情况发生,就随机用中心值做基准值。
AC代码:
#include<stdio.h>
int a[300000],n;
void quicksort(int l,int r)
{
int i,j,temp,t;
if(l>r) return;
temp=a[(l+r)/2];//用中心值做基准数
i=l;j=r;
while(i<=j)
{
while(a[j]>temp)//从右往左
j--;
while(a[i]<temp)//左往右
i++;
if(i<=j)//交换两个数的位置
{
t=a[i];
a[i]=a[j];
a[j]=t;
i++;
j--;
}
}
if(l<j) quicksort(l,j);//递归继续处理左边的
if(i<r) quicksort(i,r);//递归继续处理右边的
}
int main()
{
int i,j;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
quicksort(1,n);
for(i=1;i<=n;i++)
printf("%d ",a[i]);
return 0;
}
明天开始刷二叉树的题。