@@ -1062,6 +1062,9 @@ new class HeliumSort {
1062
1062
keySize = n // sqrtn;
1063
1063
}
1064
1064
1065
+ sortingVisualizer.setAdaptAux(this.__adaptAux);
1066
+ this.buffer = sortingVisualizer.createValueArray(mem - keySize);
1067
+
1065
1068
new dynamic keysFound, p;
1066
1069
keysFound, p = this.findKeys(array, a, b, keySize);
1067
1070
if keysFound is None {
@@ -1073,8 +1076,6 @@ new class HeliumSort {
1073
1076
if keysFound == keySize {
1074
1077
this.sortRuns(array, a, b - keysFound, p);
1075
1078
1076
- sortingVisualizer.setAdaptAux(this.__adaptAux);
1077
- this.buffer = sortingVisualizer.createValueArray(mem - keySize);
1078
1079
this.indices = sortingVisualizer.createValueArray(keySize);
1079
1080
1080
1081
this.keyLen = keysFound;
@@ -1084,9 +1085,7 @@ new class HeliumSort {
1084
1085
} else {
1085
1086
this.sortRuns(array, a, b, p);
1086
1087
1087
- sortingVisualizer.setAdaptAux(this.__adaptAux);
1088
- this.buffer = sortingVisualizer.createValueArray(mem - keySize);
1089
- this.keys = sortingVisualizer.createValueArray(keySize);
1088
+ this.keys = sortingVisualizer.createValueArray(keySize);
1090
1089
1091
1090
this.heliumLoop(array, a, b);
1092
1091
}
@@ -1103,6 +1102,8 @@ new class HeliumSort {
1103
1102
keySize = n // sqrtn;
1104
1103
}
1105
1104
1105
+ this.buffer = sortingVisualizer.createValueArray(mem);
1106
+
1106
1107
new dynamic keysFound, p;
1107
1108
keysFound, p = this.findKeys(array, a, b, keySize);
1108
1109
if keysFound is None {
@@ -1116,8 +1117,6 @@ new class HeliumSort {
1116
1117
1117
1118
this.sortRuns(array, a, b - keysFound, p);
1118
1119
1119
- this.buffer = sortingVisualizer.createValueArray(mem);
1120
-
1121
1120
this.keyLen = keysFound;
1122
1121
this.keyPos = b - keysFound;
1123
1122
@@ -1132,6 +1131,10 @@ new class HeliumSort {
1132
1131
return;
1133
1132
}
1134
1133
1134
+ if mem > 0 {
1135
+ this.buffer = sortingVisualizer.createValueArray(mem);
1136
+ }
1137
+
1135
1138
new int ideal = sqrtn + keySize;
1136
1139
new dynamic keysFound, p;
1137
1140
keysFound, p = this.findKeys(array, a, b, ideal);
@@ -1146,10 +1149,6 @@ new class HeliumSort {
1146
1149
1147
1150
this.sortRuns(array, a, b - keysFound, p);
1148
1151
1149
- if mem > 0 {
1150
- this.buffer = sortingVisualizer.createValueArray(mem);
1151
- }
1152
-
1153
1152
if keysFound == ideal {
1154
1153
this.blockLen = sqrtn;
1155
1154
this.bufLen = sqrtn;
@@ -1171,7 +1170,8 @@ new class HeliumSort {
1171
1170
@Sort(
1172
1171
" Block Merge Sorts" ,
1173
1172
" Helium Sort" ,
1174
- " Helium Sort"
1173
+ " Helium Sort" ,
1174
+ usesDynamicAux = True
1175
1175
);
1176
1176
new function heliumGenSortRun(array) {
1177
1177
new int mem = sortingVisualizer.getUserInput(" Insert memory size (or -4 .. -1 for default modes)" , " 0" );
@@ -1183,14 +1183,15 @@ new function heliumGenSortRun(array) {
1183
1183
" Uranium Sort (Helium strategy 1)" ,
1184
1184
" Uranium Sort"
1185
1185
);
1186
- new function hydrogenSortRun (array) {
1186
+ new function uraniumSortRun (array) {
1187
1187
HeliumSort().sort(array, 0 , len(array), - 1 );
1188
1188
}
1189
1189
1190
1190
@Sort(
1191
1191
" Block Merge Sorts" ,
1192
1192
" Hydrogen Sort (Helium strategy 2A)" ,
1193
- " Hydrogen Sort"
1193
+ " Hydrogen Sort" ,
1194
+ usesDynamicAux = True
1194
1195
);
1195
1196
new function hydrogenSortRun(array) {
1196
1197
HeliumSort().sort(array, 0 , len(array), - 2 );
0 commit comments