基于Lua的冒泡排序算法实现

2023-10-27

冒泡排序核心:

比较相邻的元素。如果第一个比第二个大,就交换他们两个。

对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。

针对所有的元素重复以上的步骤,除了最后一个。

持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

 

-----------------------------------------------------------------------------------------
-- 实现一个自定义的 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
-----------------------------------------------------------------------------------------


--[[ 
基于Lua的冒泡排序:
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
--]]

function bubble_sort(tab)
  len = maxn_ex(tab)
  for i=1,len-1 do
      for j=i+1,len do
        if(tab[i] > tab[j]) then
          tab[i],tab[j] = tab[j],tab[i]
        end
      end
  end 
  return tab
end


-- 测试算法
function test()
  local tab = {8,31,4,5,23,7,46,22}
  ret = bubble_sort(tab)
  printArray(ret)
end

test()

打印输出:

array[1]:	4
array[2]:	5
array[3]:	7
array[4]:	8
array[5]:	22
array[6]:	23
array[7]:	31
array[8]:	46

 

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

基于Lua的冒泡排序算法实现 的相关文章

  • 设置私有 luarocks 存储库

    对于我的设置 我需要一个 luarocks rock 的私有存储库 我可以将它们安装在我的开发环境中 而无需连接到互联网 为 luarocks 设置远程存储库的步骤是什么 我可以使用 sftp 服务器吗 有人有过这样的经历吗 在深入研究这个
  • 错误 main.lua:23:尝试索引 upvalue 'Menu' (布尔值)

    我正在尝试用 lua 和 love2d 制作一个主菜单 这是我第一次这样做 遗憾的是没有关于此事的教程 所以我自己尝试了一下 我一直遇到这个错误 我不知道如何解决它 请帮助 完整错误消息 错误main lua 23 尝试索引upvalue
  • 访问 Lua 类型元表

    显然 getmetatable 可以访问几种类型的元表 getmetatable getmetatable getmetatable newproxy true 然而 似乎您无法获取其他类型的元表 除了函数 似乎无法访问数字 布尔值或 ni
  • 覆盖 require 后调用 lua_getfield() 时崩溃

    这个问题与 Henri Menke 在这个问题中的回答相关 如何在 C 中获取预加载模块名称 https stackoverflow com questions 51510308 how to get preloaded module na
  • 使用 OOP 的闭包方法时如何实现受保护的成员?

    现在我正在使用实施 OOP 的闭包 http lua users org wiki ObjectOrientationClosureApproach在卢阿 下面是一个简短的示例 我的问题发生在尝试实施时stronger heal insid
  • LuaJit FFI 从 C 函数返回字符串到 Lua?

    假设我有这个 C 函数 declspec dllexport const char GetStr static char buff 32 Fill the buffer with some string here return buff 这
  • 如何更新lua中的时间以反映执行过程中系统时区的变化?

    Problem 我想修改awful widget textclockAwesome wm 中的小部件可以立即反映系统时区的更改 这个小部件和所有的 Awesome wm 配置都是用 lua 编写的 目前 如果系统时区发生更改 小部件将继续根
  • Lua - 尝试调用全局(零值)

    执行此代码时 出现错误 尝试调用全局 forId 零值 function execute args local itemid 526 local bone forId itemid this is where the error occur
  • 检查lua中是否存在目录?

    如何检查 lua 中是否存在目录 如果可能的话最好不使用 LuaFileSystem 模块 尝试做类似以下 python 行的事情 os path isdir path 这是一种在 Unix 和 Windows 上都适用的方式 无需任何外部
  • 为什么 LuaJIT 和 Lua 中的数字舍入格式不同?

    Using string format 据说遵循 Csprintf 在 LuaJIT 轮次中格式化数字与我尝试过的所有其他 Lua 解释器不同 lua v Lua 5 4 1 Copyright C 1994 2020 Lua org PU
  • lua http套接字超时

    LuaSocket HTTP 模块文档说可以在 HTTP 连接上设置超时 可以设置以下常量来控制 HTTP 模块的默认行为 PORT 用于连接的默认端口 PROXY 用于连接的默认代理 TIMEOUT 设置所有I O操作的超时时间 USER
  • Lua-迭代嵌套表

    我已经学习 Lua 几个星期了 这一次又一次成为我的症结所在 我尝试阅读有关该主题的帖子和书籍 我使用 Lua 查询软件监控系统 Nimsoft 我的数据以表格形式返回给我 我不会发布整个输出 但这里有一个我认为可以描述结构的片段 表参考是
  • Kong - 验证上游 ssl(ssl_proxy 打开)

    我已经成功为 API 安装了 kong 网关 该 API 通过上游负载平衡到多个目标 应用程序服务器 现在 我有一个我的应用程序服务器的自签名证书 kong 和目标之间的 ssl 握手应该失败 我推断 kong 不验证上游证书 经过一些研究
  • VB6 - Lua 集成

    我想知道是否有人有任何集成 Lua 和 VB6 的技巧 我正在运行一个小型在线角色扮演游戏 添加一些脚本会很棒 嗯 这是可行的 我曾经为 Lua 5 0 2 做过 但找不到文件 在您拥有的选项中 您可以 将 Lua 封装在公开 Lua AP
  • Lua 将字符串转换为数字 - 取决于语言环境

    刚刚注意到字符串 and tonumber 在 Lua 中是依赖于语言环境的 知道如何在不使用的情况下将字符串转换为数字tonumber 谢谢 例如将字符串 58 5 转换为 58 5 另外 当我尝试将带点的数字传递给函数时 该函数会转换
  • Lua 访问表的键和值

    我想在关卡编辑器中读取 Lua 文件 这样我就可以以可视化格式显示其数据供用户编辑 如果我有一个像这样的 Lua 表 properties Speed 10 TurnSpeed 5 Speed显然是关键并且10价值 我知道如果我知道像这样的
  • 如何通过 C API 在自己的环境中执行不受信任的 Lua 文件

    我想通过调用在其自己的环境中执行不受信任的 lua 文件lua setfenv http pgl yoyo org luai i lua setfenv这样它就不会影响我的任何代码 该函数的文档仅解释了如何调用函数 而不解释如何执行文件 目
  • 如何终止Lua脚本?

    如何终止 Lua 脚本 现在我在 exit 方面遇到问题 我不知道为什么 这更像是一个 Minecraft ComputerCraft 问题 因为它使用了包含的 API 这是我的代码 while true do if turtle dete
  • 如何让我的 add 命令找到第一个变量和第二个变量的值,然后将它们加在一起?

    vars values function open file lex file end function lex file local data io open file r for char in data lines do Print
  • Lua中有状态迭代器和无状态迭代器的区别

    Lua中无状态和有状态迭代器有什么区别 请详细解释一下 什么时候需要使用无状态 什么时候需要使用另一种 我需要例子来理解这个概念 首先让我们就一个定义达成一致 在 Lua 中 迭代器是function 类似对象 每次调用时都会返回序列中的下

随机推荐

  • 解决Echarts与R的可视化中,横坐标显示不全的问题

    解决Echarts与R的可视化中 横坐标显示不全的问题 在做可视化的过程中 最烦的就是图做出来了 坐标显示不全的问题 接下来介绍两个解决问题的方法 在做可视化的过程中 最烦的就是图做出来了 坐标显示不全的问题 接下来介绍两个解决问题的方法
  • 数据可视化清新版【chart.js】学习笔记9.0—气泡图(Bubble Chart)

    Bubble Chart 气泡图 气泡图用于同时显示三维数据 气泡的位置由前两个维度以及相应的水平和垂直轴线确定 第三个维度由单个气泡的大小来表示 官方文档 https www chartjs org docs latest charts
  • PHP也能实现区块链?

    引言 什么是区块链 官方的解释是 区块链是一个分布式记账系统 是藉用密码学串接并保护其内容的串连交易记录 又称区块 每一个区块包含了前一个区块的加密散列 对应的时间戳记以及交易数据 通常用默克尔树算法计算的散列值表示 这样的设计使得区块内容
  • Java的List集合根据实体类的属性去重数据

    一 Stream流去重 创建一个包含DeptEntity对象的List 并向其中添加若干元素 List
  • 想月入过万?不妨试试Python爬虫

    上班打工不给力 打工人需要PlanB 敢问当代年轻人谁没动过搞副业的念头呢 ChatGPT的横空出世 更是让担心饭碗不保的年轻人把搞副业提上了日程 在哪个城市搞副业最卷 副业在网上炒的火热 实际上能不能挣到钱 哪个副业才是能月入过万的 财富
  • 惊群效应及其解决方法

    这里写目录标题 惊群效应的概念 惊群效应的解决方法 在accept之前加锁 SO REUSEPORT 惊群效应的概念 惊群现象就是多进程 多线程 在同时阻塞等待同一个事件的时候 休眠状态 如果等待的这个事件发生 那么他就会唤醒等待的所有进程
  • Python游戏开发 unit05_Pygame物体移动和边界碰撞

    一 移动的本质 物体的位置变化 其实是坐标的变化 循环一次 刷新画布 重新绘制 二 边界的碰撞反弹 左边 x lt 0 右边 x gt 窗口宽度 物体宽度 上边 y lt 0 下边 y gt 窗口高度 物体高度 三 完整代码演示 impor
  • 总结Python的几点语言特性

    总结Python的几点语言特性 Python语言简洁 优雅 扩展性强 这些特点常被Python程序员挂在嘴边 确实也都是Python的特点 要讨论语言的特点或特性 可以得到很多不同的结论 有针对语言整体而言的特性 也有针对某一个应用领域的特
  • R语言解决三门问题(ggplot可视化)

    三门问题背景介绍 三门问题 Monty Hall problem 亦称为蒙提霍尔问题 蒙特霍问题或蒙提霍尔悖论 大致出自美国的电视游戏节目Let s Make a Deal 问题名字来自该节目的主持人蒙提 霍尔 Monty Hall 参赛者
  • 德鲁克《卓有成效的管理者》学习&读书-总结

    有幸学习了管理大师德鲁克先生的 卓有成效的管理者 帮助学习者理清了在理论和实践之间建立桥梁 使其生根落地 开花结果 管理不是常识 管理是个实践学科 要不断温习 不断与领导同事联接 交流碰撞 不断的在事上练 所谓卓有成效 就是不断让优秀的习惯
  • C#基础知识点总结(八)- 集合和特殊集合

    元素个数是动态的 就应使用集合类 大多数集合接口都可在System Collections和System Collections Generie名称空间中找到 详细可见 C 集合 Collection 菜鸟教程 runoob com 1 列
  • 机器学习<降维和度量学习>-matlab代码#3

    文章目录 测试样本 K近邻学习 K nearest Neighbor 降维 MDS算法 测试数据 MDS代码 主成分分析 PCA降维 核化线性降维 核化主成分分析 KPCA 流行学习 等度量映射Isometric Mapping 流行学习
  • 光照(二):镜面反射分量,Phong模型,Blinn模型

    标准光照方程的镜面反射分量指由光源直接经物体表面反射入眼睛的光线 1 Phong模型 标题镜面反射的Phong模型 所有向量均为单位向量 n为表面法向量 v指向观察者 l指向光源 对方向光源 l为定值 r为 镜像 向量 即l对n的镜像结果
  • 一文带你掌握抓包工具的使用-科来

    本篇彭老师将图文并茂教你如何使用抓包工具 并在文章最后教大家如何偷取FTP的用户名密码 一 安装 一口君为大家介绍一个非常好用的抓包工具 科来 下载地址 http www colasoft com cn 下载完毕 双击直接下一步即可安装 二
  • 二分查找+快排

    include
  • 10 大流行软件测试工具

    作者 Alexandra Gorobets 译者 侯晓辉 策划 万佳 01 前言 本文介绍了一些测试工具 它们可以帮助我们快速 有效地交付 Tricentis 主导的一项全球调查为我们提供了几个有关测试趋势的重要观察 趋势表明 团队倾向于使
  • 面板数据处理

    这里写自定义目录标题 1 面板数据录入 2 缩尾处理 3 描述性统计 4 相关性分析 5 多重共线性检验 6 设置虚拟变量 7 多元OLS回归 8 豪斯曼检验 在对面板数据进行回归之前 要先检验这个模型用固定好还是用随机效应好 现在普遍都用
  • Maven工程的安装配置及搭建(集成eclipse完成案例,保姆级教学)

    目录 一 下载及安装及环境配置 1 下载及安装 2 环境变量的配置 3 检测是否安装成功 4 配置Maven 1 更换本地仓库 2 配置镜像 二 集成eclipse完成案例 1 eclipse前期配置Maven 2 创建Maven工程 一
  • 二极管

    二极管 转载于 https www cnblogs com kexi p 10922119 html
  • 基于Lua的冒泡排序算法实现

    冒泡排序核心 比较相邻的元素 如果第一个比第二个大 就交换他们两个 对每一对相邻元素作同样的工作 从开始第一对到结尾的最后一对 这步做完后 最后的元素会是最大的数 针对所有的元素重复以上的步骤 除了最后一个 持续每次对越来越少的元素重复上面