📄 qcksrt.c
字号:
#define M 7
#define NSTACK 50
#define FM 7875
#define FA 211
#define FC 1663
void qcksrt(n,arr)
int n;
float arr[];
{
int l=1,jstack=0,j,ir,iq,i;
int istack[NSTACK+1];
long int fx=0L;
float a;
void nrerror();
ir=n;
for (;;) {
if (ir-l < M) {
for (j=l+1;j<=ir;j++) {
a=arr[j];
for (i=j-1;arr[i]>a && i>0;i--) arr[i+1]=arr[i];
arr[i+1]=a;
}
if (jstack == 0) return;
ir=istack[jstack--];
l=istack[jstack--];
} else {
i=l;
j=ir;
fx=(fx*FA+FC) % FM;
iq=l+((ir-l+1)*fx)/FM;
a=arr[iq];
arr[iq]=arr[l];
for (;;) {
while (j > 0 && a < arr[j]) j--;
if (j <= i) {
arr[i]=a;
break;
}
arr[i++]=arr[j];
while (a > arr[i] && i <= n) i++;
if (j <= i) {
arr[(i=j)]=a;
break;
}
arr[j--]=arr[i];
}
if (ir-i >= i-l) {
istack[++jstack]=i+1;
istack[++jstack]=ir;
ir=i-1;
} else {
istack[++jstack]=l;
istack[++jstack]=i-1;
l=i+1;
}
if (jstack > NSTACK) nrerror("NSTACK too small in QCKSRT");
}
}
}
#undef M
#undef NSTACK
#undef FM
#undef FA
#undef FC
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -