003 选择排序(lua)

文章目录

先挑最值,再把剩下的挑最值,再把剩下的挑最值。。。

1selectionSort.lua

lua 复制代码
  
-- 排序函数  
function selectionSort(arr)  
    -- 外层循环,从数组的第一个元素开始,对每个元素进行排序  
    for i = 1, #arr do  
        -- 假设当前位置的元素是最小的  
        local minIndex = i  
        -- 内层循环,从当前位置开始,查找剩余元素中的最小值  
        for j = i, #arr do  
            -- 如果找到一个更小的元素,更新最小元素的索引  
            if arr[j] < arr[minIndex] then  
                minIndex = j  
            end  
        end  
        -- 交换当前位置和最小元素的位置  
        swap(arr, i, minIndex)  
    end  
end  
  
-- 交换函数  
function swap(arr, i, j)  
    -- 使用一个临时变量来交换两个元素的值  
    local temp = arr[i]  
    arr[i] = arr[j]  
    arr[j] = temp  
end  
  
-- 主程序  
-- 定义一个待排序的数组  
local arr = {1, 5, 2, 8, 9, 3}  
-- 调用排序函数进行排序  
selectionSort(arr)  
-- 打印排序后的数组  
for _, v in ipairs(arr) do  
    print(v .. " ")  
end  

Lua中的数组和字典都使用相同的数据结构(即表),但在这个例子中,我们只使用了数组部分。

2selectionSort.lua

lua 复制代码
function selectionSort(arr)  
    local length = #arr  
    for i = 1, length do  
        local minIndex = i  
        for j = i, length do  
            if arr[j] < arr[minIndex] then  
                minIndex = j  
            end  
        end  
        arr[i], arr[minIndex] = arr[minIndex], arr[i]  -- Swap elements  
    end  
end  
  
function main()  
    local arr = {1, 5, 2, 8, 9, 3}  
    selectionSort(arr)  
    for _, v in ipairs(arr) do  
        print(v, " ")  
    end  
end  
  
main()

复杂度

O(n^2)

SortingHelper.lua

lua 复制代码
-- SortingHelper.lua  
  
-- isSorted function to check if an array is sorted in ascending order  
function isSorted(arr)  
    for i = 2, #arr do  
        if arr[i-1] > arr[i] then  
            return false  
        end  
    end  
    return true  
end  
  
-- sortTest function to test a sorting algorithm and measure its execution time  
function sortTest(sortName, arr)  
    -- Lua doesn't have a direct equivalent of System.nanoTime(),  
    -- so we use os.clock() which provides the CPU time used by the Lua state in seconds  
    local startTime = os.clock()  
      
    if sortName == "SelectionSort" then  
        selectionSort(arr)  
    end  
      
    local endTime = os.clock()  
    local time = endTime - startTime  -- This will give the time in seconds  
      
    if not isSorted(arr) then  
        error(sortName .. " failed")  
    end  
      
    print(string.format("%s, n = %d: %f s", sortName, #arr, time))  
end  
  
-- This is a placeholder for the actual selectionSort function,  
-- which should be implemented separately as shown in the previous answer.  
function selectionSort(arr)  
    -- Implementation of the selection sort algorithm goes here  
end  
  
-- Example usage:  
local arr = {1, 5, 2, 8, 9, 3}  
sortTest("SelectionSort", arr)

Lua的os.clock()函数测量的是CPU时间,而不是实际经过的时间。这在某些情况下可能不同于Java的System.nanoTime(),后者测量的是实际经过的时间。此外,由于Lua的性能测量可能不如Java精确,因此结果可能会有所不同。

还需要注意的是,Lua中没有异常处理机制与Java的throw new RuntimeException()完全对应。在Lua中,我们通常使用error()函数来抛出一个错误,这会终止程序的执行。如果你需要更复杂的错误处理,你可能需要实现自己的错误处理逻辑。

相关推荐
红黑色的圣西罗12 分钟前
Lua 怎么解决闭包内存泄漏问题
开发语言·lua
诗这样的10 小时前
【需求变更】使用 Redis 和 Lua 脚本实现变更后方案编号的生成
java·redis·缓存·微服务·lua·需求分析
gopher951112 小时前
lua 运算符和控制语句
开发语言·lua
不喝水的鱼儿1 天前
【LuatOS】修改LuatOS源码为PC模拟器添加高精度时间戳库timeplus
lua·时间戳·luatos
菠萝地亚狂想曲3 天前
优雅的LUA数据记录方法-serpent序列化+LUA Table
开发语言·junit·lua
我是汉堡请多指教3 天前
lua学习笔记---面向对象
笔记·学习·lua
不喝水的鱼儿4 天前
【LuatOS】Lua与LuatOS中的Math.randomseed
lua·luatos·随机数
Flame_Cyclone4 天前
动态库实现lua网络请求GET, POST, 下载文件
lua·lua动态库
硬汉嵌入式4 天前
H7-TOOL的LUA小程序教程第17期:扩展驱动AD7606, ADS1256,MCP3421, 8路继电器和5路DS18B20(2024-11-01)
junit·小程序·lua
qq_312920115 天前
Nginx+Lua脚本+Redis 实现自动封禁访问频率过高IP
redis·nginx·lua