sort.cxx
来自「科学和工程计算中使用统计功能开发工具包.」· CXX 代码 · 共 54 行
CXX
54 行
//$$ sort.cxx Sorting
// Copyright (C) 1991,2: R B Davies
#define WANT_MATH
#include "include.h"
#include "newmatap.h"
/******************************** Shell sort ********************************/
void SortAscending(GeneralMatrix& GM)
{
// from numerical recipies in C - Shell sort
Tracer et("Sort-ascending");
const double aln2i = 1.442695022; const double tiny = 1.0e-5;
Real* gm = GM.Store(); int n = GM.Storage(); int m = n;
int lognb2 = (int)(aln2i * log((double)n) + tiny);
while (lognb2--)
{
m >>= 1;
for (int j = m; j<n; j++)
{
Real* gmj = gm+j; int i = j-m; Real* gmi = gmj-m; Real t = *gmj;
while (i>=0 && *gmi>t) { *gmj = *gmi; gmj = gmi; gmi -= m; i -= m; }
*gmj = t;
}
}
}
void SortDescending(GeneralMatrix& GM)
{
// from numerical recipies in C - Shell sort
Tracer et("Sort-descending");
const double aln2i = 1.442695022; const double tiny = 1.0e-5;
Real* gm = GM.Store(); int n = GM.Storage(); int m = n;
int lognb2 = (int)(aln2i * log((double)n) + tiny);
while (lognb2--)
{
m >>= 1;
for (int j = m; j<n; j++)
{
Real* gmj = gm+j; int i = j-m; Real* gmi = gmj-m; Real t = *gmj;
while (i>=0 && *gmi<t) { *gmj = *gmi; gmj = gmi; gmi -= m; i -= m; }
*gmj = t;
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?