Skip to content

Commit 5963e88

Browse files
authored
Create mergesort.lua
0 parents  commit 5963e88

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

sorting/mergesort.lua

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
2+
--[[
3+
Lua implementation of merge sort
4+
5+
Author: Carlos Abraham Hernandez (abraham@abranhe.com)
6+
--]]
7+
8+
local function lt( x, y )
9+
return x < y
10+
end
11+
12+
return function( a, cmp, b, num, pad )
13+
cmp, b, num, pad = cmp or lt, b or {}, num or #a, pad or 1
14+
15+
local k = 1
16+
while k < num do
17+
for left = 0, num-k-1, k+k do
18+
local rght = left + k
19+
local rend = rght + k
20+
21+
if rend > num then
22+
rend = num
23+
end
24+
25+
local m, i, j = left, left, rght
26+
27+
while i < rght and j < rend do
28+
if cmp( a[i+pad], a[j+pad] ) then
29+
b[m+pad] = a[i+pad]
30+
i = i + 1
31+
else
32+
b[m+pad] = a[j+pad]
33+
j = j + 1
34+
end
35+
m = m + 1
36+
end
37+
38+
while i < rght do
39+
b[m+pad] = a[i+pad]
40+
i, m = i + 1, m + 1
41+
end
42+
43+
while j < rend do
44+
b[m+pad] = a[j+pad]
45+
j, m = j + 1, m + 1
46+
end
47+
48+
for l = left, rend-1 do
49+
a[l+pad] = b[l+pad]
50+
end
51+
end
52+
53+
k = k + k
54+
end
55+
return a

0 commit comments

Comments
 (0)