⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ilasrt2.c

📁 最著名最快的分子模拟软件
💻 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 + -