RT, 先放原题:
- 如果将 ① 处的 l >= r 条件删除(同时删除 || 使得程序能正常编译运行,下 同),程序的时间复杂度不会发生变化;而将 p > q 条件删除,程序在某些数据下 的运行效率将会明显降低。 ( )
#include<iostream>
using namespace std;
int a[100005], b[100005], n, m;
void very_quick_sort(int l, int r, int p, int q){
if(l >= r || p > q){ // ①
return;
}
int mid = (l + r) / 2;
int p0 = p - 1;
int q0 = q + 1;
for(int i = p;i <= q;i ++){
if(a[i] > mid) b[++ p0] = a[i];
else b[-- q0] = a[i];
}
for(int i = p;i <= q;i ++)
a[i] = b[i];
very_quick_sort(mid + 1, r, p, p0);
very_quick_sort(l, mid, q0, q);
}
int main(){
cin >> n >> m;
for(int i = 1;i <= n;i ++)
cin >> a[i];
very_quick_sort(1, m, 1, n);
// ②
for(int i = 1;i <= n;i ++)
cout << a[i] << " ";
cout << endl;
return 0;
}
去掉l>=r会死循环,而去掉p>q则只会影响时间复杂度。
故本题应为×,而非√。然而答案本题为√。