下列代码的功能是将一列元素{ r[1] … r[n] }按其键值 key 的非递减顺序排序。普通选择排序是每次仅将一个待排序列的最小元放到正确的位置上,而这个另类的选择排序是每次从待排序列中同时找到最小元和最大元,把它们放到最终的正确位置上。 void sort( list r[], int n ) { int i, j, mini, maxi; for (i=1; i<n-i+1; i++) { mini = maxi = i; for( j=i+1; ; ++j ){ if( ) mini = j; else if(r[j]->key > r[maxi]->key) maxi = j; } if( ) swap(&r[mini], &r[i]); if( maxi != n-i+1 ){ if( ) swap(&r[mini], &r[n-i+1]); else swap(&r[maxi], &r[n-i+1]); } } }
时间: 2024-01-24 17:04:25 浏览: 110
sortkeys:对 Javascript 对象的键进行排序
这个另类的选择排序每次找出待排序列中的最小值和最大值,然后将它们分别放到正确的位置上。具体实现方法是,设待排序列为 r[1] 到 r[n],排序时从左右两端同时向中间扫描,找到当前扫描区间中的最小值和最大值,分别和待排序列的第 i 个和第 n-i+1 个元素交换,然后继续缩小扫描区间。排序结束后,r[1] 到 r[n] 中的元素按 key 的非递减顺序排列。
完整代码如下:
```c
void sort(list r[], int n) {
int i, j, mini, maxi;
for (i = 1; i <= n - i + 1; i++) {
mini = maxi = i;
for (j = i + 1; j <= n - i + 1; ++j) {
if (r[j]->key < r[mini]->key) {
mini = j;
} else if (r[j]->key > r[maxi]->key) {
maxi = j;
}
}
if (mini != i) {
swap(&r[mini], &r[i]);
}
if (maxi == i) {
maxi = mini;
}
if (maxi != n - i + 1) {
swap(&r[maxi], &r[n - i + 1]);
}
}
}
```
阅读全文