我有一个函数,可以接收两个元素并按升序返回它们:
大多数快速排序算法使用条件来决定要做什么。当然有冒泡排序,但它需要M = N(N-1)/2次比较。这不是最优的选择,例如,当N = 4时,需要M = 6次比较,而4个条目可以用5次排序:
void Sort2(int &a, int &b) {
if (a < b) return;
int t = a;
a = b;
b = t;
}
如果我不允许使用额外的条件运算符,那么使用这个函数对具有N个条目的数组进行排序的最快方法是什么? 这意味着我的整个程序应该像这样:
int main(){
int a[N];
// fill a array
const int NS = ...; // number of comparison, depending on N.
const int c[NS] = { {0,1}, {0,2}, ... }; // consequence of indices pairs generated depending on N.
for( int i = 0; i < NS; i++ ) {
Sort2(a[c[i][0]], a[c[i][1]]);
}
// sort is finished
return 1;
}
大多数快速排序算法使用条件来决定要做什么。当然有冒泡排序,但它需要M = N(N-1)/2次比较。这不是最优的选择,例如,当N = 4时,需要M = 6次比较,而4个条目可以用5次排序:
Sort2(a[0],a[1]);
Sort2(a[2],a[3]);
Sort2(a[1],a[3]);
Sort2(a[0],a[2]);
Sort2(a[1],a[2]);
if
看起来对我来说很有条件呢;-) - Mateusz Dymczyk