5-1
下列代码的功能是将一列元素{ 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<=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 != n-i+1 ){
if(
maxi == i
) swap(&r[mini], &r[n-i+1]);
else swap(&r[maxi], &r[n-i+1]);
}
}
}
版权声明:本文为Gusta_j原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。