交换法:
-- region TestLua.lua
function Sort(list)
local gap = math.floor(#list / 2)
while gap > 0 do
for i = gap + 1, #list do
local j = i
while j > gap and list[j] < list[j - gap] do
Swap(list, j, j - gap)
j = j - gap
end
end
gap = math.floor(gap / 2)
end
end
function Swap(list, index0, index1)
local temp = list[index0]
list[index0] = list[index1]
list[index1] = temp
end
--- <summary>
--- main logic.
--- </summary>
m_List = { 0, 4, 3, 2, 1 }
Sort(m_List)
--- <summary>
--- output string.
--- </summary>
m_Output = ""
for i, v in pairs(m_List) do
m_Output = m_Output .. tostring(v) .. ", "
end
print("m_Output=" .. m_Output)
os.execute("pause")
-- endregion
移动法:
-- region TestLua.lua
function Sort(list)
local gap = math.floor(#list / 2)
while gap > 0 do
for i = gap + 1, #list do
local j = i
local temp = list[j];
-- 前面已经是排好序的,所以前一个元素不大于这个元素的话,就证明这个元素已经是最大的元素了
while (j - gap >= 1 and temp < list[j - gap]) do
-- 移动法,每次list[j]都是覆盖
list[j] = list[j - gap];
j = j - gap;
end
list[j] = temp;
end
gap = math.floor(gap / 2)
end
end
function Swap(list, index0, index1)
local temp = list[index0]
list[index0] = list[index1]
list[index1] = temp
end
--- <summary>
--- main logic.
--- </summary>
m_List = { 0, 4, 3, 2, 1 }
Sort(m_List)
--- <summary>
--- output string.
--- </summary>
m_Output = ""
for i, v in pairs(m_List) do
m_Output = m_Output .. tostring(v) .. ", "
end
print("m_Output=" .. m_Output)
os.execute("pause")
-- endregion