序
这是一个历史遗留问题
下文有两个函数 qsort
和qsort2
,其中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;
}
话说qsort2是按照算法导论的那个写的么?
忘记了嘛都多久了 这玩真玄学