📄 sort.c
字号:
/*************************************************************************//* *//* Sorting utilities *//* ----------------- *//* *//*************************************************************************/#include "defns.i"#include "types.i"#include "extern.i"/*************************************************************************//* *//* Sort items from Fp to Lp on attribute a *//* *//*************************************************************************/void Quicksort(ItemNo Fp,ItemNo Lp,Attribute Att, void (*Exchange)(ItemNo,ItemNo)){ register ItemNo Lower, Middle; register float Thresh; register ItemNo i;
if ( Fp < Lp ) { Thresh = CVal(Item[Lp], Att);
/* Isolate all items with values <= threshold */
Middle = Fp;
for ( i = Fp ; i < Lp ; i++ )
{
if ( CVal(Item[i], Att) <= Thresh )
{
if ( i != Middle ) (*Exchange)(Middle, i);
Middle++;
}
}
/* Extract all values equal to the threshold */
Lower = Middle - 1;
for ( i = Lower ; i >= Fp ; i-- )
{
if ( CVal(Item[i], Att) == Thresh )
{
if ( i != Lower ) (*Exchange)(Lower, i);
Lower--;
}
}
/* Sort the lower values */
Quicksort(Fp, Lower, Att, Exchange);
/* Position the middle element */
(*Exchange)(Middle, Lp);
/* Sort the higher values */
Quicksort(Middle+1, Lp, Att, Exchange);
}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -