常见的排序算法

冒泡排序

比较相邻的两个数据,第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, ','))

欢迎纠错。。。

未完待续。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值