程序填空题:另类选择排序
下列代码的功能是将一列元素{ `r[1] … r[n]` }按其键值 `key` 的非递减顺序排序。普通选择排序是每次仅将一个待排序列的最小元放到正确的位置上,而这个另类的选择排序是每次从待排序列中同时找到最小元和最大元,把它们放到最终的正确位置上。
```c++
void sort( list r[], int n )
{
int i, j, mini, maxi;
for (i=1; i mini = maxi = i;
for( j=i+1; @@[j<=n-i+1](3); ++j ){
if( @@[r[j]->key < r[mini]->key](3) ) mini = j;
else if(r[j]->key > r[maxi]->key) maxi = j;
}
if( @@[mini != i](3) ) swap(&r[mini], &r[i]);
if( maxi != n-i+1 ){
if( @@[maxi == i](3) ) swap(&r[mini], &r[n-i+1]);
else swap(&r[maxi], &r[n-i+1]);
}
}
}
```
答案:
第1空:j<=n-i+1
第2空:r[j]->key < r[mini]->key
第3空:mini != i
第4空:maxi == i
```c++
void sort( list r[], int n )
{
int i, j, mini, maxi;
for (i=1; i
for( j=i+1; @@[j<=n-i+1](3); ++j ){
if( @@[r[j]->key < r[mini]->key](3) ) mini = j;
else if(r[j]->key > r[maxi]->key) maxi = j;
}
if( @@[mini != i](3) ) swap(&r[mini], &r[i]);
if( maxi != n-i+1 ){
if( @@[maxi == i](3) ) swap(&r[mini], &r[n-i+1]);
else swap(&r[maxi], &r[n-i+1]);
}
}
}
```
答案:
第1空:j<=n-i+1
第2空:r[j]->key < r[mini]->key
第3空:mini != i
第4空:maxi == i