49#define SORTTPL_SHELLSORTMAX 25
50#define SORTTPL_MINSIZENINTHER 729
52#ifndef SORTTPL_NAMEEXT
53#error You need to define SORTTPL_NAMEEXT.
55#ifndef SORTTPL_KEYTYPE
56#error You need to define SORTTPL_KEYTYPE.
59#ifdef SORTTPL_EXPANDNAME
60#undef SORTTPL_EXPANDNAME
67#ifdef SORTTPL_FIELD1TYPE
68#define SORTTPL_HASFIELD1(x) x
69#define SORTTPL_HASFIELD1PAR(x) x,
71#define SORTTPL_HASFIELD1(x)
72#define SORTTPL_HASFIELD1PAR(x)
74#ifdef SORTTPL_FIELD2TYPE
75#define SORTTPL_HASFIELD2(x) x
76#define SORTTPL_HASFIELD2PAR(x) x,
78#define SORTTPL_HASFIELD2(x)
79#define SORTTPL_HASFIELD2PAR(x)
81#ifdef SORTTPL_FIELD3TYPE
82#define SORTTPL_HASFIELD3(x) x
83#define SORTTPL_HASFIELD3PAR(x) x,
85#define SORTTPL_HASFIELD3(x)
86#define SORTTPL_HASFIELD3PAR(x)
88#ifdef SORTTPL_FIELD4TYPE
89#define SORTTPL_HASFIELD4(x) x
90#define SORTTPL_HASFIELD4PAR(x) x,
92#define SORTTPL_HASFIELD4(x)
93#define SORTTPL_HASFIELD4PAR(x)
95#ifdef SORTTPL_FIELD5TYPE
96#define SORTTPL_HASFIELD5(x) x
97#define SORTTPL_HASFIELD5PAR(x) x,
99#define SORTTPL_HASFIELD5(x)
100#define SORTTPL_HASFIELD5PAR(x)
102#ifdef SORTTPL_FIELD6TYPE
103#define SORTTPL_HASFIELD6(x) x
104#define SORTTPL_HASFIELD6PAR(x) x,
106#define SORTTPL_HASFIELD6(x)
107#define SORTTPL_HASFIELD6PAR(x)
109#ifdef SORTTPL_PTRCOMP
110#define SORTTPL_HASPTRCOMP(x) x
111#define SORTTPL_HASPTRCOMPPAR(x) x,
113#define SORTTPL_HASPTRCOMP(x)
114#define SORTTPL_HASPTRCOMPPAR(x)
116#ifdef SORTTPL_INDCOMP
117#define SORTTPL_HASINDCOMP(x) x
118#define SORTTPL_HASINDCOMPPAR(x) x,
120#define SORTTPL_HASINDCOMP(x)
121#define SORTTPL_HASINDCOMPPAR(x)
129#define SORTTPL_EXPANDNAME(method, methodname) \
131#define SORTTPL_NAME(method, methodname) \
132 SORTTPL_EXPANDNAME(method, methodname)
135#ifdef SORTTPL_PTRCOMP
136#ifdef SORTTPL_BACKWARDS
137#define SORTTPL_CMP(x,y) (-ptrcomp((x), (y)))
139#define SORTTPL_CMP(x,y) (ptrcomp((x), (y)))
142#ifdef SORTTPL_INDCOMP
143#ifdef SORTTPL_BACKWARDS
144#define SORTTPL_CMP(x,y) (-indcomp(dataptr, (x), (y)))
146#define SORTTPL_CMP(x,y) (indcomp(dataptr, (x), (y)))
149#ifdef SORTTPL_BACKWARDS
150#define SORTTPL_CMP(x,y) ((y) - (x))
152#define SORTTPL_CMP(x,y) ((x) - (y))
157#define SORTTPL_ISBETTER(x,y) (SORTTPL_CMP(x,y) < 0)
158#define SORTTPL_ISWORSE(x,y) (SORTTPL_CMP(x,y) > 0)
161#define SORTTPL_SWAP(T,x,y) \
188 static const int incs[3] = {1, 5, 19};
193 for( k = 2; k >= 0; --k )
196 int first =
h + start;
199 for(
i = first;
i <= end; ++
i )
218 if( weights !=
NULL )
219 weights[j] = weights[j -
h];
232 if( weights !=
NULL )
233 weights[j] = tmpweight;
314 pivotindex = (start + end) / 2;
318 int mid = (start + end) / 2;
329 int gap = (end - start + 1) / 9;
335 assert(start + 8 * gap <= end);
343 start, start + gap, start + 2 * gap);
350 start + 3 * gap, start + 4 * gap, start + 5 * gap);
356 start + 6 * gap, start + 7 * gap, start + 8 * gap);
364 median1, median2, median3);
443 assert((hi == lo-1) || (type && hi == start) || (!type && lo == end));
490 if( hi - start <= end - lo )
538 if( end - start >= 1 )
569 for(
i = 0;
i < len-1;
i++ )
712 assert(0 <= pos && pos < *len);
716 for( j = pos; j < *len; j++ )
732#ifndef SORTTPL_FIELD1TYPE
759 while( left <= right )
763 middle = (left+right)/2;
764 assert(0 <= middle && middle < len);
790 SORTTPL_SWAP(SORTTPL_KEYTYPE, key[x], key[y]); \
792 if( weights != NULL ) \
793 SORTTPL_SWAP(SCIP_Real, weights[x], weights[y]); \
795 SORTTPL_HASFIELD1( SORTTPL_SWAP(SORTTPL_FIELD1TYPE, field1[x], field1[y]); ) \
796 SORTTPL_HASFIELD2( SORTTPL_SWAP(SORTTPL_FIELD2TYPE, field2[x], field2[y]); ) \
797 SORTTPL_HASFIELD3( SORTTPL_SWAP(SORTTPL_FIELD3TYPE, field3[x], field3[y]); ) \
798 SORTTPL_HASFIELD4( SORTTPL_SWAP(SORTTPL_FIELD4TYPE, field4[x], field4[y]); ) \
799 SORTTPL_HASFIELD5( SORTTPL_SWAP(SORTTPL_FIELD5TYPE, field5[x], field5[y]); ) \
800 SORTTPL_HASFIELD6( SORTTPL_SWAP(SORTTPL_FIELD6TYPE, field6[x], field6[y]); ) \
825 for(
i = 0;
i < len;
i++ )
827 weightsum += weights !=
NULL ? weights[
i] : 1.0;
868 int localmedianpos = -1;
876 if( weights !=
NULL )
878 totalweightsum = 0.0;
879 for( j = 0; j < len; ++j )
880 totalweightsum += weights[j];
883 totalweightsum = len;
887 localmedianpos = len;
892 partialweightsum = 0.0;
914 pivot = key[pivotindex];
917 if( pivotindex != lo )
919 EXCH(lo, pivotindex);
958 if( weights !=
NULL )
961 weightsum = partialweightsum;
962 for(
i = lo;
i < bt; ++
i )
965 weightsum += weights[
i];
980 for( p = bt; p <= wt; ++p )
983 pivotweight = weights !=
NULL ? weights[p] : 1.0;
984 weightsum += pivotweight;
996 partialweightsum = weightsum;
1004 if( hi - lo + 1 > 1 )
1023 hi =
MIN(hi + 1, len - 1);
1026 for( j = lo; j <= hi; ++j )
1028 partialweightsum += weights !=
NULL ? weights[j] : 1.0;
1035 goto CHECKANDRETURN;
1048 localmedianpos = len;
1065 if( medianpos !=
NULL )
1066 *medianpos = localmedianpos;
1092 if( k < 0 || k >= len )
1112 NULL, capacity, len, &pos);
1119#undef SORTTPL_NAMEEXT
1120#undef SORTTPL_KEYTYPE
1121#undef SORTTPL_FIELD1TYPE
1122#undef SORTTPL_FIELD2TYPE
1123#undef SORTTPL_FIELD3TYPE
1124#undef SORTTPL_FIELD4TYPE
1125#undef SORTTPL_FIELD5TYPE
1126#undef SORTTPL_FIELD6TYPE
1127#undef SORTTPL_PTRCOMP
1128#undef SORTTPL_INDCOMP
1129#undef SORTTPL_HASFIELD1
1130#undef SORTTPL_HASFIELD2
1131#undef SORTTPL_HASFIELD3
1132#undef SORTTPL_HASFIELD4
1133#undef SORTTPL_HASFIELD5
1134#undef SORTTPL_HASFIELD6
1135#undef SORTTPL_HASPTRCOMP
1136#undef SORTTPL_HASINDCOMP
1137#undef SORTTPL_HASFIELD1PAR
1138#undef SORTTPL_HASFIELD2PAR
1139#undef SORTTPL_HASFIELD3PAR
1140#undef SORTTPL_HASFIELD4PAR
1141#undef SORTTPL_HASFIELD5PAR
1142#undef SORTTPL_HASFIELD6PAR
1143#undef SORTTPL_HASPTRCOMPPAR
1144#undef SORTTPL_HASINDCOMPPAR
1145#undef SORTTPL_ISBETTER
1146#undef SORTTPL_ISWORSE
1150#undef SORTTPL_SHELLSORTMAX
1151#undef SORTTPL_MINSIZENINTHER
1152#undef SORTTPL_BACKWARDS
common defines and data types used in all packages of SCIP
#define SCIP_DEFAULT_EPSILON
void SCIPsort(int *perm, SCIP_DECL_SORTINDCOMP((*indcomp)), void *dataptr, int len)
assert(minobj< SCIPgetCutoffbound(scip))
#define SORTTPL_FIELD1TYPE
#define SORTTPL_FIELD3TYPE
#define SORTTPL_FIELD5TYPE
#define SORTTPL_FIELD4TYPE
#define SORTTPL_FIELD2TYPE
#define SORTTPL_HASFIELD1PAR(x)
#define SORTTPL_HASPTRCOMPPAR(x)
#define SORTTPL_SHELLSORTMAX
#define SORTTPL_HASFIELD6(x)
#define SORTTPL_HASFIELD3PAR(x)
#define SORTTPL_MINSIZENINTHER
#define SORTTPL_HASFIELD5PAR(x)
#define SORTTPL_HASFIELD2(x)
#define SORTTPL_HASINDCOMPPAR(x)
#define SORTTPL_ISBETTER(x, y)
#define SORTTPL_HASFIELD6PAR(x)
#define SORTTPL_NAME(method, methodname)
#define SORTTPL_CMP(x, y)
#define SORTTPL_HASFIELD3(x)
#define SORTTPL_HASFIELD2PAR(x)
#define SORTTPL_ISWORSE(x, y)
#define SORTTPL_HASFIELD5(x)
#define SORTTPL_HASFIELD4PAR(x)
#define SORTTPL_HASFIELD4(x)
#define SORTTPL_HASFIELD1(x)
#define SORTTPL_SWAP(T, x, y)
#define SCIP_DECL_SORTPTRCOMP(x)
#define SCIP_DECL_SORTINDCOMP(x)