📄 ilasrt2.c
字号:
#include "gmx_lapack.h"void F77_FUNC(ilasrt2,ILASRT2)(char *id, int *n, int *d__, int *key, int *info){ int i__1, i__2; int i__, j, d1, d2, d3, dir, tmp, endd; int stack[64], dmnmx, start; int tmpkey, stkpnt; --key; --d__; *info = 0; dir = -1; if (*id=='D' || *id=='d') dir = 0; else if (*id=='I' || *id=='i') dir = 1; if (dir == -1) { *info = -1; } else if (*n < 0) { *info = -2; } if (*info != 0) { return; } if (*n <= 1) { return; } stkpnt = 1; stack[0] = 1; stack[1] = *n;L10: start = stack[(stkpnt << 1) - 2]; endd = stack[(stkpnt << 1) - 1]; --stkpnt; if (endd - start > 0) { if (dir == 0) { i__1 = endd; for (i__ = start + 1; i__ <= i__1; ++i__) { i__2 = start + 1; for (j = i__; j >= i__2; --j) { if (d__[j] > d__[j - 1]) { dmnmx = d__[j]; d__[j] = d__[j - 1]; d__[j - 1] = dmnmx; tmpkey = key[j]; key[j] = key[j - 1]; key[j - 1] = tmpkey; } else { goto L30; } }L30: ; } } else { i__1 = endd; for (i__ = start + 1; i__ <= i__1; ++i__) { i__2 = start + 1; for (j = i__; j >= i__2; --j) { if (d__[j] < d__[j - 1]) { dmnmx = d__[j]; d__[j] = d__[j - 1]; d__[j - 1] = dmnmx; tmpkey = key[j]; key[j] = key[j - 1]; key[j - 1] = tmpkey; } else { goto L50; } }L50: ; } } } else if (endd - start > 20) { d1 = d__[start]; d2 = d__[endd]; i__ = (start + endd) / 2; d3 = d__[i__]; if (d1 < d2) { if (d3 < d1) { dmnmx = d1; } else if (d3 < d2) { dmnmx = d3; } else { dmnmx = d2; } } else { if (d3 < d2) { dmnmx = d2; } else if (d3 < d1) { dmnmx = d3; } else { dmnmx = d1; } } if (dir == 0) { i__ = start - 1; j = endd + 1;L60:L70: --j; if (d__[j] < dmnmx) { goto L70; }L80: ++i__; if (d__[i__] > dmnmx) { goto L80; } if (i__ < j) { tmp = d__[i__]; d__[i__] = d__[j]; d__[j] = tmp; tmpkey = key[j]; key[j] = key[i__]; key[i__] = tmpkey; goto L60; } if (j - start > endd - j - 1) { ++stkpnt; stack[(stkpnt << 1) - 2] = start; stack[(stkpnt << 1) - 1] = j; ++stkpnt; stack[(stkpnt << 1) - 2] = j + 1; stack[(stkpnt << 1) - 1] = endd; } else { ++stkpnt; stack[(stkpnt << 1) - 2] = j + 1; stack[(stkpnt << 1) - 1] = endd; ++stkpnt; stack[(stkpnt << 1) - 2] = start; stack[(stkpnt << 1) - 1] = j; } } else { i__ = start - 1; j = endd + 1;L90:L100: --j; if (d__[j] > dmnmx) { goto L100; }L110: ++i__; if (d__[i__] < dmnmx) { goto L110; } if (i__ < j) { tmp = d__[i__]; d__[i__] = d__[j]; d__[j] = tmp; tmpkey = key[j]; key[j] = key[i__]; key[i__] = tmpkey; goto L90; } if (j - start > endd - j - 1) { ++stkpnt; stack[(stkpnt << 1) - 2] = start; stack[(stkpnt << 1) - 1] = j; ++stkpnt; stack[(stkpnt << 1) - 2] = j + 1; stack[(stkpnt << 1) - 1] = endd; } else { ++stkpnt; stack[(stkpnt << 1) - 2] = j + 1; stack[(stkpnt << 1) - 1] = endd; ++stkpnt; stack[(stkpnt << 1) - 2] = start; stack[(stkpnt << 1) - 1] = j; } } } if (stkpnt > 0) { goto L10; } return;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -