基于Lua的选择排序算法实现

2023-10-26

 选择排序思想的核心:
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
重复第二步,直到所有元素均排序完毕。

说直白点,以从小到大排序来说,就是:

第一轮找到最小的哪个元素所在的位置,记录下来,然后把数组(或table)中第一个元素和最小值位置的元素进行交换;

第二轮,从第二个位置起,找到剩余未排序的元素中值最小的哪个元素,记录下位置,然后把数组中第二个位置的元素和最小值的元素进行交换

套娃中....

直到所有元素都排序完毕,收工.


--------------------------------------------------------------------------------------------------------------
-- 实现一个自定义的 maxn_ex 函数,计算table中元素的个数
function maxn_ex(tab)
  local length = 0
  for i in pairs(tab) do
    length = length +1
  end
  return length
end


 -- 通过递归实现数组的打印
function printArray(array)
  for i = 1,table.maxn(array) do
    if type(array[i]) ~="table" then  -- 子项不为数组
      print("array["..i.."]:",array[i])
    else  -- 子项仍为数组
      if array[i] == nil then
        break
      end
      -- 递归
      printArray(array[i])
    end
  end
end
--------------------------------------------------------------------------------------------------------------

--[[
选择排序:
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
重复第二步,直到所有元素均排序完毕。
--]]

function select_sort(tab)
  len = maxn_ex(tab)
  for i=1,len -1 do
    local min = i
    
    for j = i+1,len do
      if(tab[min] > tab[j]) then
        min = j  -- 记录最小值的下标索引
      end
    end
    
    -- 将本轮找到的最小值放到第i个位置
    tab[i],tab[min] = tab[min],tab[i]  
  end
  return tab
end



--- 测试1
function test_01()
  local tab = {2,1,6,3,17,8}
  printArray(  select_sort(tab))
  print("------------")
end


--测试2 
function test_02()
  local tab = {36,58,14,24,69,13,45,87,99}
  printArray(select_sort(tab))
  print("------------")
end

test_01()
test_02()

结果:

array[1]:	1
array[2]:	2
array[3]:	3
array[4]:	6
array[5]:	8
array[6]:	17
------------
array[1]:	13
array[2]:	14
array[3]:	24
array[4]:	36
array[5]:	45
array[6]:	58
array[7]:	69
array[8]:	87
array[9]:	99

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于Lua的选择排序算法实现 的相关文章

  • Lua 中的“加载”有什么作用?

    我试图解决我的理解问题loadLua 脚本中的函数 但没有该命令的任何示例或指南 它在他自己的 Lua 网站上讲述https www lua org manual 5 2 manual html pdf load https www lua
  • 寻找 Lua 4.1 alpha

    我正在帮助为一款相当老的游戏 孤岛惊魂 开发多人模式 我想编译lua代码 但游戏使用版本4 1 alpha 我在任何地方都找不到 lua 4 1 alpha tar gz http www lua org work old lua 4 1
  • lua检查多个值是否相等

    我喜欢用 Roblox 制作游戏 并用 lua 编写代码 在编写游戏时 我发现自己经常问一个值是否等于另一个值 这可能会产生很长的代码行 并且可能非常重复 例如 如果 x ClassName 衬衫 或x ClassName 附件 或x Cl
  • 如何加载目录中的所有文件?

    正如标题所说 如何加载目录中的每个文件 我对c 和lua都感兴趣 编辑 对于 Windows 我很高兴能得到一些真正的工作代码 尤其是 lua 我可以用 boost filesystem for c 来做 对于 Lua 你需要模块Lua文件
  • Lua:“拖动”数组中的元素序列

    我正在尝试创建一个函数 将连续数量的元素 拖动 到数组中的新位置 并限制为数组的当前大小 其他项目应该围绕 拖动 的项目晃动 例如 如果我的数组有 7 个元素 并且我想拖动中间的三个 1 2 3 4 5 6 7 lt keys a b C
  • 使用 OOP 的闭包方法时如何实现受保护的成员?

    现在我正在使用实施 OOP 的闭包 http lua users org wiki ObjectOrientationClosureApproach在卢阿 下面是一个简短的示例 我的问题发生在尝试实施时stronger heal insid
  • 在 lua 中使用相等运算符比较数字有多安全?

    在我的引擎中 我有一个用于脚本编写的 Lua VM 在脚本中 我写了这样的内容 stage stage 1 if stage 5 then end and objnum tonumber 5 if stage objnum 根据 Lua 来
  • 创建独立的 Lua 可执行文件

    有没有一种简单的方法可以从 Lua 脚本创建独立的 exe 文件 基本上这将涉及链接 Lua 解释器和脚本 我相信这是可能的 PLT 方案允许以相同的方式创建独立的可执行文件 但是到底是如何实现的呢 查看srlua http www tec
  • Corona/Box2D 检测与非移动静态物体的碰撞

    出于发帖原因 这是我正在尝试做的事情的简单版本 在屏幕上我有一个简单的圆形对象 它是静态的并且不会移动 然后用户可以拖放一条直线 如果该线穿过该圆圈 我希望触发碰撞事件 看来除非其中一个物体正在移动 否则永远不会检测到碰撞 绘制线条时能否检
  • 我应该用 C++ 封装 Lua 代码的哪些代码?

    我终于将 LuaBind 配置为与我的 C 项目一起使用 我最近发现 Tiled 地图编辑器可以选择将文件导出为 lua 所以我想尝试一下 我将使用什么代码来封装下面粘贴的代码以使其与我的 C RPG 项目一起使用 return versi
  • C 的哪些部分最可移植?

    我最近读到了 Lua 联合创始人 Luiz H de Figueredo 和 Roberto Ierusalimschy 的采访 他们讨论了 Lua 的设计和实现 至少可以说这是非常有趣的 然而 讨论的一部分让我想起了一些事情 Robert
  • Redis 排序集和解决关系

    我正在使用 Redis 排序集来存储我正在处理的项目的排名 我们没有预料到 我们想要如何处理关系 Redis 按字典顺序对具有相同分数的条目进行排序 但我们想要做的是对具有相同分数的所有条目给予相同的排名 例如在以下情况 redis 127
  • Redis INCRBY 有限制

    我想知道是否有一种方法可以通过我的应用程序的单次往返在 Redis 中执行此操作 对于给定的键K 其可能值V是范围内的任意整数 A B 基本上 它有上限和下限 When an INCRBY or DECRBY发出命令 例如INCRBY ke
  • 什么时候适合使用Lua这样的嵌入式脚本语言

    我玩 魔兽世界 大约有两年了 我对用来编写插件的 Lua 很好奇 由于到目前为止我读到的有关 Lua 的内容都是 快 轻 和 这太棒了 所以我想知道如何以及何时使用它 您需要在系统中嵌入像 Lua 这样的脚本语言的典型情况是什么 当您需要最
  • Lua 从 5.1 更新 - LUA_GLOBALSINDEX 问题

    我最近将旧的 Lua 5 1 项目更新到了该库的最新版本 但遇到了问题LUA GLOBALSINDEX 它变得不确定 我只用过它lua getfield函数 像这样 void luastartgame void if startgamefu
  • Lua中按字符分割字符串

    我有像这样的字符串 ABC DEF 我需要将它们分开 字符并将两个部分分别分配给一个变量 在 Ruby 中 我会这样做 a b ABC DEF split 显然Lua没有这么简单的方法 经过一番挖掘后 我找不到一种简短的方法来实现我所追求的
  • 如何使用 srlua 制作可执行的 Lua 脚本?

    我的主要目标是使我的 lua 文件成为可执行文件或使其成为咬代码 最好是两者皆有 我正在尝试 srlua 但在自述文件中它告诉我要做的事情 对于Windows 您需要首先创建srlua exe和glue exe 然后为每个 你想把Lua程序
  • Openresty 中的并发模型是什么?

    我很难理解 openresty 或 nginx 的并发模型 我读了Lua变量作用域 http wiki nginx org HttpLuaModule Lua Variable Scope 它解释了变量的生命周期 但它没有说明对它们的并发访
  • 关闭 Löve2D 中的抗锯齿功能

    我在用着L ve2D http love2d org用于编写一个小游戏 L ve2D 是 Lua 的开源游戏引擎 我遇到的问题是 当您在非整数位置绘制精灵时 某些抗锯齿过滤器会自动应用于精灵 love graphics draw sprit
  • 在 Awesome-wm 中为特定应用程序设置窗口布局

    如何配置很棒 以便它可以启动两个窗口对齐的新应用程序 如下所示 xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx 其中 x 是 pidgin 中的对话窗口 是好友列表窗口 一般来说 我想指定右窗口的宽度

随机推荐

  • oh-my-zsh,让你的Linux命令终端从未这么爽过

    oh my zsh shell的类型有很多种 linux下默认的是bash 虽然bash的功能已经很强大 但对于以懒惰为美德的程序员来说 bash的提示功能不够强大 界面也不够炫 并非理想工具 而zsh的功能极其强大 只是配置过于复杂 起初
  • Python数据库 -- 查询结果处理、SQL表内数据去重

    目录 需求 Python脚本查询数据库及返回结果的处理 MySQL表内既有数据的去重思想及SQL语句 需求 每次在爬动态的时候都会把前几条重复爬取 以前想着先把功能完善了再说 终于 功能做完了 要面对这个数据问题了 想法是先看看领英的帖子是
  • 云计算与大数据概论(1) 云计算,大数据是什么

    云计算与大数据概论 1 云计算 大数据是什么 云计算的应用场景 云计算概念 云计算简史 云计算定义 云计算基本特征 大数据应用场景 大数据概念 大数据简史 大数据定义 大数据基础特征 两者之间的关系 本文同步发在印象笔记 https www
  • 区块链:Solidity合约结构

    一个完整的合约 一个完整的合约 我们可以理解为一个类 代码如下 pragma solidity 0 4 4 contract Counter uint count 0 address owner function Counter owner
  • windows mysql dump_mysqldump备份(Windows)

    先说下思路 每天凌晨1点备份线上云服务器上的MySQL数据库 将备份的sql文件拷贝下来 第二步 Windows脚本代码 echo 取日期 时间变量值set yy date 4 set mm date 5 2 set dd date 8 2
  • ChromeDriver/Selenium/Python浏览器自动化初体验

    目录 ChromeDriver安装 Selenium安装 Python脚本 ChromeDriver安装 在浏览器地址栏输入 查看chrome当前版本 chrome version 在浏览器地址栏输入 查找chrome当前版本的Chrome
  • linux 下解压及创建 tar.xz

    一 在linux 下解压 tar xz 文件步骤 以linux 2 6 30 tar xz 文件为例进行讲解 1 xz d linux 2 6 30 此时会生成linux 2 6 30 tar 文件 PS xz 命令解压时 加 k 参数可以
  • windows安装linux

    https www cnblogs com liuqingzheng p 16271895 html 咱们安装linux系统是centos7 准备工作 安装软件 vmware 虚拟机 官网下载地址 下载 VMware Workstation
  • 从哪里可以获取QT应用开发用到的图标资源?

    Qt官方网站 Qt官方网站提供了大量的Qt应用开发的图片资源 您可以通过访问Qt官方网站并搜索 Qt icons 或 Qt images 来找到它们 https www qt io Qt Creator Qt Creator是Qt的官方集成
  • hanlp2.x使用与语义角色标注任务

    hanlp 2 x的文档逻辑不太好看 这里记录一下语义角色标注任务的相关代码与文档中的重要内容 hanlp github地址 https github com hankcs HanLP hanlp各种任务缩写 https hanlp han
  • stata外部命令大全(包含面板门槛、系统GMM、空间计量、Pvar、中介效应等)

    1 数据来源 自主整理 2 时间跨度 无 3 区域范围 无 4 指标说明 该些外部命令包含面板门槛 系统GMM 空间计量 pvar 中介效应等涵盖全部 以下是部分命令截图 空间计量 系统GMM 动态广义矩估计 使用介绍 各位朋友使用时把pl
  • find_package()函数

    find package函数 引言 1 find package用法 2 find package原理 3 A required library with LAPACK API not found 错误解决 4 添加findpackage查
  • Java 应用配置 GC 日志输出内容

    Java 应用配置 GC日志输出文件 GC 日志部分配置项 基本 GC 日志信息 XX PrintGCDetails XX PrintGCDateStamps XX PrintGCTimeStamps GC 后对象年龄分布信息 XX Pri
  • 手写实现ajax异步调用

    一个最重要的文件 ajax js function send request callback urladdress isReturnData var xmlhttp getXMLHttpRequest xmlhttp onreadysta
  • 万字长文解读Stable Diffusion的核心插件—ControlNet

    目录 一 介绍 二 使用方法 三 ControlNet结构 1 整体结构 2 ControlLDM 3 Timestep Embedding 4 HintBlock 5 ResBlock 6 SpatialTransformer 7 SD
  • 华为OD机试真题-预定酒店【2023Q2】【JAVA、Python、C++】

    题目描述 放暑假了 小明决定到某旅游景点游玩 他在网上搜索到了各种价位的酒店 长度为n的数组A 他的心理价位是x元 请帮他筛选出k个最接近x元的酒店 n gt k gt 0 并由低到高打印酒店的价格 备注 1 酒店价格数组A和小明的心理价位
  • SSM框架做前后端分离项目

    目录 步骤 1 先运行 看到效果 再学习 步骤 2 模仿和排错 步骤 3 本知识点效果 步骤 4 jquery min js 步骤 5 json中文问题 步骤 6 CategoryController 步骤 7 submit html 步骤
  • http://www.vcipl.okstate.edu/publications.html(资源转载)

    Visual Computing and Image Processing Lab Oklahoma State University Imaging Processing nferencing and Learning Home
  • UE4模型轮廓描边及轮廓发光

    参考自 https zhuanlan zhihu com p 81310476 1 在项目设置里把Custom Depath Stencil Pass改为Enabled with Stencil 这样蒙版值才会生效 2 在模型Renderi
  • 基于Lua的选择排序算法实现

    选择排序思想的核心 首先在未排序序列中找到最小 大 元素 存放到排序序列的起始位置 再从剩余未排序元素中继续寻找最小 大 元素 然后放到已排序序列的末尾 重复第二步 直到所有元素均排序完毕 说直白点 以从小到大排序来说 就是 第一轮找到最小