L09. 算法导论
一. 数组操作
1. ,冒泡排序
--[[ 冒泡排序算法原理: 1.依次比较相邻的两个数,将小数放在前面,大数放在后面。 即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。 然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。 2.至此第一趟结束,将最大的数放到了最后。 在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数) 将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的) 第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。 --]] local t = {10,9,8,7} local function 冒泡排序(t) local t = {table.unpack(t)} for i=1,#t-1 do --#t-1: 循环到最后一次,第一个数不需要进行对比, 他是最小的 for j=1,#t-i do --#t-i: for循环循环完后最后一个数都是最大的所有不需要重复对比 if t[j] > t[j+1] then t[j], t[j+1] = t[j+1], t[j] end end end return t end print(冒泡排序(t))
2. 选择排序
--[[ 选择排序算法原理: 1.对比数组中前一个元素跟后一个元素的大小, 如果后面的元素比前面的元素小则用一个变量k来记住他的位置, 接着第二次比较,前面"后一个元素"现变成了"前一个元素",继续跟他的"后一个元素"进行比较如果后面的元素比他要小则用变量k记住它在数组中的位置(下标), 等到循环结束的时候,我们应该找到了最小的那个数的下标了,然后进行判断,如果这个元素的下标不是第一个元素的下标, 就让第一个元素跟他交换一下值,这样就找到整个数组中最小的数了。然后找到数组中第二小的数,让他跟数组中第二个元素交换一下值,以此类推。 --]] local t = {10,9,8,7} local function 选择排序(t) local t = {table.unpack(t)} for i=1,#t-1 do min = i for j=i+1,#t do if t[min] > t[j] then min = j end end t[i], t[min] = t[min], t[i] end return t end print(选择排序(t))
3.插入排序
--[[ 插入排序算法原理: 1.如果第一个元素大于第二个元素, 则将第二个元素插入到第一个元素前, 然后再判断插入的这个元素是否比前面的元素小, 如果大于则插入到前面元素的前面依次类推 代码思路: 1. 先将值保存下来, 然后挨个移位, 然后将保存的值赋值 --]] local t = {2,1,3} local function 插入排序(t) local t, j = {table.unpack(t)} for i=2,#t do local temp = t[i] j = i - 1 while j>=1 and t[j] >= temp do t[j+1] = t[j] j = j - 1 end t[j+1] = temp end return t end print(插入排序(t))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能