2019-05-21 P1177

作者: 桐桑入梦 | 来源:发表于2019-05-21 13:24 被阅读0次

题目链接:https://www.luogu.org/problemnew/show/P1177
参考程序:

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
const int maxn=100000+10;
int A[maxn],n;
/*
void quickSort(int L,int R){
    int i=L,j=R;
    while(i<=j){
        int mid=(i+j)/2;
        while(A[i]<A[mid]) i++;
        while(A[j]>=A[mid]) j--;
        if(i<=j){
            swap(A[i++],A[j--]);
        }
    }
    if(L<j) quickSort(L,j);
    if(i<R) quickSort(i,R);
}
*/
void quickSort(int L,int R)
{
    int mid = A[(L+R)/2];
    int i=L,j=R;
    while(i<=j)
    {
        while(A[i]<mid) i++;
        while(A[j]>mid) j--;
        if(i<=j) swap(A[i++],A[j--]);
    }
    if(L<j) quickSort(L,j);
    if(i<R) quickSort(i,R);
}
int main(void){
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%d",&A[i]);
    quickSort(1,n); 
    for(int i=1;i<=n;i++){
        if(i!=n) printf("%d ",A[i]);
        else printf("%d\n",A[i]);
    }
    return 0;
}

这里注释的地方细节的地方一定出了错误,但是不知道哪里错了错误?检查一下?
这里的mid是作为一个中间值,把[L,R]中的数据分成两个部分,自己处理的时候,每一次都修改了mid的值,这是一个非常低级的错误。



这是修改之后的函数,但是还是有错误的!!!
再看一眼正确的方法:


这里有错误


相关文章

网友评论

    本文标题:2019-05-21 P1177

    本文链接:https://www.haomeiwen.com/subject/zyadzqtx.html