冒泡排序
算法通过嵌套的循环比较相邻的两个元素,如果前一个元素比后一个元素大,则交换它们的位置。重复进行这个过程,直到没有任何一对相邻元素需要交换为止。
越后面越大,小的放前面,大的放后面
function BubbleSort(arr)
local count = #arr
for i=1,count-1 do
for j=1 , count - i do
if arr[j] > arr[j+1] then
arr[j],arr[j+1]=arr[j+1],arr[j]
end
end
end
end
--test
local arr = {
3, 9, 4, 7, 2, 0, 1, 8, 6, 5}
BubbleSort(arr)
for i, v in ipairs(arr) do
print(v)
end
快速排序
该算法通过递归地将数组分成更小的子数组,并对每个子数组调用 partition() 函数。partition() 函数选择数组中最后一个元素作为枢纽元,并将数组分成两个部分,一部分包含所有小于等于枢纽元的元素,一部分包含所有大于枢纽元的元素。最后返回枢纽元在排序后的数组中的位置。
function quick_sort(arr, low, high)
if not low then low = 1 end
if not high then high = #arr end
if low < high then
local p = partition(arr, low, high)
quick_sort(arr, low, p - 1)
quick_sort(arr, p + 1, high)
end
end
function partition(arr, low, high)
local pivot = arr[high]
local i = low - 1
for j = low, high - 1 do
if arr[j] <= pivot then
i = i + 1
arr[i], arr[j] = arr[j], arr[i]
end
end
arr[i + 1], arr[high] = arr[high], arr[i + 1]
return i + 1
end
--test
local arr = {
3, 9, 4, 7, 2, 0, 1, 8, 6, 5}
quick_sort(arr)
for i, v in ipairs(arr) do
print(v)
end