Quick Sort 和 Quick Sort

@vrqq  December 19, 2017

这是一个历史遗留问题
下文有两个函数 qsortqsort2,其中qsort是对的,而qsort2会tle/wa?。。。
直到现在还不知道是哪里的事儿。。囧rz

Template

#include <iostream>
using namespace std;
int a[100]={1,2,3,8,6,3,1,4,2,9,9,9,1}, n=13;
void qsort2(int l, int r){//Wrong version??.
    int i=l, j=r;
    int ch=a[i];
    while (i<j) {
        while (i<j && ch<=a[j]) j--;
        a[i]=a[j];
        while (i<j && a[i]<=ch) i++;
        a[j]=a[i];
    }
    a[i]=ch;
    if (l<i-1) qsort2(l,i-1);
    if (i+1<r) qsort2(i+1,r);
}
void qsort(int l, int r) {//It's ok to use it.
    int i=l, j=r;
    int ch=a[(l+r)>>1];
    do {
        while(ch<a[j]) j--;
        while(a[i]<ch) i++;
        if (i<=j)
            swap(a[i],a[j]), i++,j--;
    }while(i<=j);
    if (l<j) qsort(l,j);
    if (i<r) qsort(i,r);
}
int main() {
    for (int i=0; i<n; i++)
        cout<<a[i]<<" ";
    cout<<endl;

    qsort(0,n-1);
    for (int i=0; i<n; i++)
        cout<<a[i]<<" ";
    cout<<endl;
    return 0;
}

已有 2 条评论

  1. SPYNGELION SPYNGELION

    话说qsort2是按照算法导论的那个写的么?

    1. 忘记了嘛都多久了 这玩真玄学

添加新评论