Skip to content

Commit c25e1d8

Browse files
authored
Add Merge Sort in Haxe (#5210)
1 parent c755f04 commit c25e1d8

File tree

1 file changed

+79
-0
lines changed

1 file changed

+79
-0
lines changed

archive/h/haxe/MergeSort.hx

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package;
2+
import Sys;
3+
class MergeSort {
4+
static function main() {
5+
var args = Sys.args();
6+
7+
if(args.length != 1) {
8+
usage();
9+
return;
10+
}
11+
12+
13+
var input = args[0];
14+
15+
var parts = input.split(",");
16+
var numbers = [];
17+
18+
19+
try {
20+
for (p in parts) {
21+
var trimmed = StringTools.trim(p);
22+
if (trimmed == "") throw "Invalid";
23+
numbers.push(Std.parseInt(trimmed));
24+
}
25+
} catch (e:Dynamic) {
26+
usage();
27+
return;
28+
}
29+
if(numbers.length < 2) {
30+
usage();
31+
return;
32+
}
33+
34+
var sorted = mergeSort(numbers);
35+
trace(sorted.join(", "));
36+
}
37+
static function mergeSort(arr:Array<Int>):Array<Int> {
38+
if (arr.length <= 1) return arr;
39+
40+
var mid = Std.int(arr.length / 2);
41+
var left = mergeSort(arr.slice(0, mid));
42+
var right = mergeSort(arr.slice(mid, arr.length));
43+
44+
return merge(left, right);
45+
}
46+
47+
48+
static function merge(left:Array<Int>, right:Array<Int>):Array<Int> {
49+
var result:Array<Int> = [];
50+
var i = 0;
51+
var j = 0;
52+
53+
while (i < left.length && j < right.length) {
54+
if (left[i] <= right[j]) {
55+
result.push(left[i]);
56+
i++;
57+
} else {
58+
result.push(right[j]);
59+
j++;
60+
}
61+
}
62+
63+
while (i < left.length) {
64+
result.push(left[i]);
65+
i++;
66+
}
67+
68+
while (j < right.length) {
69+
result.push(right[j]);
70+
j++;
71+
}
72+
73+
return result;
74+
}
75+
76+
static function usage() {
77+
trace('Usage: please provide a list of at least two integers to sort in the format "1, 2, 3, 4, 5"');
78+
}
79+
}

0 commit comments

Comments
 (0)