33 #ifndef IOSS_Ioss_Sort_h 34 #define IOSS_Ioss_Sort_h 54 template <
typename INT>
void SWAP(
INT *V,
size_t I,
size_t J) {
std::swap(V[I], V[J]); }
56 template <
typename INT>
void order3(
INT v[],
size_t left,
size_t center,
size_t right)
58 if (v[left] > v[center]) {
59 SWAP(v, left, center);
61 if (v[left] > v[right]) {
64 if (v[center] > v[right]) {
65 SWAP(v, center, right);
69 template <
typename INT>
size_t median3(
INT v[],
size_t left,
size_t right)
71 size_t center = (left + right) / 2;
76 if (right - left > 40) {
77 size_t s = (right - left) / 8;
78 order3(v, left, left + s, left + 2 * s);
79 order3(v, center - s, center, center + s);
80 order3(v, right - 2 * s, right - s, right);
89 SWAP(v, center, right - 1);
93 template <
typename INT>
void qsort_int(
INT v[],
size_t left,
size_t right)
98 if (left + QSORT_CUTOFF < right) {
99 pivot =
median3(v, left, right);
104 while (v[++i] < v[pivot]) {
107 while (v[--j] > v[pivot]) {
118 SWAP(v, i, right - 1);
135 for (i = 1; i < N; i++) {
144 for (i = 1; i < N; i++) {
146 for (j = i; tmp < v[j - 1]; j--) {
155 template <
typename INT>
void qsort(std::vector<INT> &v)
void qsort(std::vector< INT > &v)
Definition: Ioss_Sort.h:155
The main namespace for the Ioss library.
Definition: Iocgns_DatabaseIO.h:50
void swap(Json::Value &a, Json::Value &b)
Specialize std::swap() for Json::Value.
Definition: json.h:1159
void order3(INT v[], size_t left, size_t center, size_t right)
Definition: Ioss_Sort.h:56
void SWAP(INT *V, size_t I, size_t J)
Definition: Ioss_Sort.h:54
const int QSORT_CUTOFF
Definition: Ioss_Sort.h:52
int INT
Definition: Ioss_StructuredBlock.h:53
void qsort_int(INT v[], size_t left, size_t right)
Definition: Ioss_Sort.h:93
size_t median3(INT v[], size_t left, size_t right)
Definition: Ioss_Sort.h:69
void isort_int(INT v[], size_t N)
Definition: Ioss_Sort.h:124