冒泡排序
比较相邻的两个数据,第1个数据比第2个数据大则交换,第一次遍历完,最大的数在最后面
local arr = {2,5,1,8,6,3,9,7,4}
for i = 1, #arr do
for j = 1, #arr - i do
if arr[j] > arr[j+1] then
local temp = arr[j]
arr[j] = arr[j+1]
arr[j+1] = temp
end
end
end
print(table.concat(arr, ','))
选择排序
第一次遍历先找出最小(大)的数据放在数组的第一个位置,第二次遍历再在剩余数组中找出第二小(大)的数据放在数组的第二个位置,以此类推
local arr = {2,5,1,8,6,3,9,7,4}
for i = 1, #arr do
local min = i
for j = i, #arr do
if arr[min] > arr[j] then
min = j
end
end
if min ~= i then
local temp = arr[i]
arr[i] = arr[min]
arr[min] = temp
end
end
print(table.concat(arr, ','))
插入排序
从第二个元素开始,从后到前,遍历已排序的数值,插入到合适的位置
local arr = {2,5,1,8,6,3,9,7,4}
for i = 2, #arr do
local cur = arr[i]
local index = i
for j = i - 1, 1, -1 do
if arr[j] > cur then
arr[j+1] = arr[j]
index = j
end
end
arr[index] = cur
end
print(table.concat(arr, ','))
希尔排序
第一步,将长度为n的一个数组,分割成k个数组,k = math.floor(n/2)
数组下标为1和k的为一组,数组下标2和k+1为一组,进行简单插入排序
第二步,将数组分割为math.floor(k/2)个数组,继续进行简单插入排序
直到k=1,排序完成。
local arr = {2,5,1,8,6,3,9,7,4}
local k = math.floor(#arr/2)
while k > 0 do
for i = k+1, #arr do
if arr[i] < arr[i-k] then
local temp = arr[i]
arr[i] = arr[i-k]
arr[i-k] = temp
end
end
k = math.floor(k/2)
end
print(table.concat(arr, ','))
欢迎纠错。。。
未完待续。。。