--排序算法汇总 lua版本
arr = {5,0,4,1,8,2,3,6,7,9}
--打印数组函数
function print_arr( arr )
for i,v in ipairs(arr) do
print(v)
end
end
--冒泡排序 从小到大
--逐个比较,谁大谁就往上走
function bubble_sort( arr )
for i, v in ipairs(arr) do
for j = 1, i do
if arr[i] < arr[j] then
arr[i], arr[j] = arr[j], arr[i]
end
end
end
end
--选择排序
--每次选出最小的那个,放在最前面
function select_sort( arr )
for i in ipairs(arr) do
local minIndex = i
for j = i + 1, #arr do
if arr[j] < arr[minIndex] then
minIndex = j
end
end
arr[i], arr[minIndex] = arr[minIndex], arr[i]
end
end
--插入排序
--每次选出一个插到已排好序的数组里
function insert_sort( arr )
for i = 2, #arr do --从第二位开始,往左边开始插
local current = arr[i] --取出要插入的数字 即基数
local j = i - 1 --该index指的是每次比较的数字的下标,从基数左边开始
while j >= 1 and arr[j] > current do --当它比基数大的时候 j>=1必须加上
arr[j + 1] = arr[j] --它要往后移一位
j = j - 1
end
arr[j+1] = current --把基数插进入
end
end
--快速排序 从小到大
--右往左探寻,左往右探寻,然后交换
function quick_sort( arr , left, right) --一定是left和right,不能写1 和 #arr
if left < right then
local t = partition(arr, left, right)
quick_sort(arr, left, t-1)
quick_sort(arr, t+1, right)
end
end
function partition( arr, left, right )
local base = arr[left] --选最左边的为基数
local i = left
local j = right
while i < j do --一定要从右边开始,逐步往左探寻
while i < j and arr[j] >= base do
j = j - 1
end
while i < j and arr[i] <= base do
i = i + 1
end
arr[i], arr[j] = arr[j], arr[i]
end
arr[left], arr[i] = arr[i], arr[left] --记得基数归为位
return i
end
--归并排序
--堆排序
--计数排序
-- bubble_sort(arr)
-- quick_sort(arr, 1 ,#arr)
-- select_sort(arr)
-- insert_sort(arr)
print_arr(arr)
排序算法 Lua实现
最新推荐文章于 2024-05-15 17:23:46 发布