1 条题解

  • 1

    介绍一种二分快排的方法``

    void quicksort(int a[],int l,int r)
    {
    	if(l>=r) return;//递归边界,检测左右两端点是否已排完
    	int i=l-1,j=r+1,flag=a[l+r>>1];//设定哨兵flag,其中l+r>>1=(l+r)/2
    	while(i<j)
    	{
    		do i++;while(a[i]<flag);//从左到右查找比哨兵大的数
    		do j--;while(a[j]>flag);//从右到左查找比哨兵小的数
    		if(i<j) swap(a[i],a[j]);//找到数之后交换他们的位置
    	}
    	quicksort(a,l,j);//递归排序左边部分
    	quicksort(a,j+1,r);//递归右边
    }
    

    调用方法

    int n,a[11451]={0};
    int main()
    {
    	scanf("%d",&n);
    	for(int i=0;i<n;i++)
    	{
    		scanf("%d",&a[i]);
    	}
    	quicksort(a,0,n-1);
    	for(int j=0;j<n;j++)
    	{
    		printf("%d ",a[j]);
    	}
    }
    

    信息

    ID
    666
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    14
    已通过
    5
    上传者