Skip to content

Commit 5e50c4f

Browse files
committed
update HeliumSort implementation
1 parent e17b9f6 commit 5e50c4f

File tree

1 file changed

+15
-14
lines changed

1 file changed

+15
-14
lines changed

sorts/HeliumSort.opal

+15-14
Original file line numberDiff line numberDiff line change
@@ -1062,6 +1062,9 @@ new class HeliumSort {
10621062
keySize = n // sqrtn;
10631063
}
10641064

1065+
sortingVisualizer.setAdaptAux(this.__adaptAux);
1066+
this.buffer = sortingVisualizer.createValueArray(mem - keySize);
1067+
10651068
new dynamic keysFound, p;
10661069
keysFound, p = this.findKeys(array, a, b, keySize);
10671070
if keysFound is None {
@@ -1073,8 +1076,6 @@ new class HeliumSort {
10731076
if keysFound == keySize {
10741077
this.sortRuns(array, a, b - keysFound, p);
10751078

1076-
sortingVisualizer.setAdaptAux(this.__adaptAux);
1077-
this.buffer = sortingVisualizer.createValueArray(mem - keySize);
10781079
this.indices = sortingVisualizer.createValueArray(keySize);
10791080

10801081
this.keyLen = keysFound;
@@ -1084,9 +1085,7 @@ new class HeliumSort {
10841085
} else {
10851086
this.sortRuns(array, a, b, p);
10861087

1087-
sortingVisualizer.setAdaptAux(this.__adaptAux);
1088-
this.buffer = sortingVisualizer.createValueArray(mem - keySize);
1089-
this.keys = sortingVisualizer.createValueArray(keySize);
1088+
this.keys = sortingVisualizer.createValueArray(keySize);
10901089

10911090
this.heliumLoop(array, a, b);
10921091
}
@@ -1103,6 +1102,8 @@ new class HeliumSort {
11031102
keySize = n // sqrtn;
11041103
}
11051104

1105+
this.buffer = sortingVisualizer.createValueArray(mem);
1106+
11061107
new dynamic keysFound, p;
11071108
keysFound, p = this.findKeys(array, a, b, keySize);
11081109
if keysFound is None {
@@ -1116,8 +1117,6 @@ new class HeliumSort {
11161117

11171118
this.sortRuns(array, a, b - keysFound, p);
11181119

1119-
this.buffer = sortingVisualizer.createValueArray(mem);
1120-
11211120
this.keyLen = keysFound;
11221121
this.keyPos = b - keysFound;
11231122

@@ -1132,6 +1131,10 @@ new class HeliumSort {
11321131
return;
11331132
}
11341133

1134+
if mem > 0 {
1135+
this.buffer = sortingVisualizer.createValueArray(mem);
1136+
}
1137+
11351138
new int ideal = sqrtn + keySize;
11361139
new dynamic keysFound, p;
11371140
keysFound, p = this.findKeys(array, a, b, ideal);
@@ -1146,10 +1149,6 @@ new class HeliumSort {
11461149

11471150
this.sortRuns(array, a, b - keysFound, p);
11481151

1149-
if mem > 0 {
1150-
this.buffer = sortingVisualizer.createValueArray(mem);
1151-
}
1152-
11531152
if keysFound == ideal {
11541153
this.blockLen = sqrtn;
11551154
this.bufLen = sqrtn;
@@ -1171,7 +1170,8 @@ new class HeliumSort {
11711170
@Sort(
11721171
"Block Merge Sorts",
11731172
"Helium Sort",
1174-
"Helium Sort"
1173+
"Helium Sort",
1174+
usesDynamicAux = True
11751175
);
11761176
new function heliumGenSortRun(array) {
11771177
new int mem = sortingVisualizer.getUserInput("Insert memory size (or -4 .. -1 for default modes)", "0");
@@ -1183,14 +1183,15 @@ new function heliumGenSortRun(array) {
11831183
"Uranium Sort (Helium strategy 1)",
11841184
"Uranium Sort"
11851185
);
1186-
new function hydrogenSortRun(array) {
1186+
new function uraniumSortRun(array) {
11871187
HeliumSort().sort(array, 0, len(array), -1);
11881188
}
11891189

11901190
@Sort(
11911191
"Block Merge Sorts",
11921192
"Hydrogen Sort (Helium strategy 2A)",
1193-
"Hydrogen Sort"
1193+
"Hydrogen Sort",
1194+
usesDynamicAux = True
11941195
);
11951196
new function hydrogenSortRun(array) {
11961197
HeliumSort().sort(array, 0, len(array), -2);

0 commit comments

Comments
 (0)