冒泡排序

function BubbleSort(arr)local len = #arr;for i = 1,len dofor j = 1,len-i doif (a[j] < a[j+1]) thena[j],a[j+1] = a[j+1],a[j];endendend
end

插入排序

function InsertSort(arr)local len = #arrfor i = 2,len dolocal temp = arr[i]local j = i-1while(j >= 1 and temp > arr[j]) doarr[j+1] = arr[j]j = j-1;endarr[j+1] = temp;end
end

选择排序

function SelectSort(arr)local len = #arrfor i = 1,len-1 dolocal maxNum = arr[i]local maxIndex = ifor j = i,len doif(arr[j] > maxNum) thenmaxNum = arr[j]maxIndex = jendendif(i~=maxIndex) thenarr[i],arr[maxIndex] = arr[maxIndex],arr[i]endend
end

快速排序

function QuickMainSort(arr,left,right)if(left>=right) thenreturn endlocal i = leftlocal j = rightlocal temp = arr[left]while(i<j) dowhile(temp>=arr[j] and i<j ) doj=j-1endwhile(temp<=arr[i] and i<j ) doi=i+1endif(i<j) thenarr[i],arr[j] = arr[j],arr[i]endendarr[left] = arr[i]arr[i] = tempQuickMainSort(arr,left,i-1)QuickMainSort(arr,i+1,right)
endfunction QuickSort(arr)QuickMainSort(arr,1,#arr)
end

归并排序

function Merge(arr,left,mid,right)if(left>=right) thenreturnendlocal tab_temp ={}local i=leftlocal k=mid+1while(i<=mid and k<=right) do  if(arr[i]>arr[k]) thentable.insert(tab_temp,arr[i])i=i+1else table.insert(tab_temp,arr[k])k=k+1endendwhile(i<=mid) dotable.insert(tab_temp,arr[i])i=i+1endwhile(k<=right) dotable.insert(tab_temp,arr[k])k=k+1endfor j=left,right doarr[j]=tab_temp[j-left+1]end
endfunction MergeMain(arr,left,right)if(left<right) thenlocal mid =  (left+right)//2MergeMain(arr,left,mid)MergeMain(arr,mid+1,right)Merge(arr,left,mid,right)end
endfunction MergeSort(arr)MergeMain(arr,1,#arr)
end

希尔排序

function ShellSort(arr)local len = #arrfor gap=1,3 do    --这里可以倒序   gap从3到1  令4-gap = gap;for i=1,4-gap do  for j=i+4-gap,len dolocal temp = arr[j]local k = j-4+gap;while(k>=1 and temp>arr[k]) doarr[k+4-gap] = arr[k]k=k-4+gap;endarr[k+4-gap] = tempendendend
end

堆排序

function HeapBulid(arr,root,size)local left = root*2local right = root*2+1local largest = rootif(left<=size and arr[left] < arr[largest]) thenlargest = leftendif(right<=size and arr[right] < arr[largest])thenlargest = rightendif(largest~=root) thenarr[root],arr[largest] = arr[largest],arr[root]HeapBulid(arr,largest,size)end
end

完整测试代码

function ArrInit(arr)arr={3,1,9,4,5,2,7,9,6,11,65,89,32,45,94,0,66}return arr
endfunction ShowArr(arr)local len = #arr;for i = 1,len doio.write(arr[i])io.write(" ")endio.write("\n");
endfunction BubbleSort(arr)local len = #arr;for i = 1,len dofor j = 1,len-i doif (a[j] < a[j+1]) thena[j],a[j+1] = a[j+1],a[j];endendend
endfunction InsertSort(arr)local len = #arrfor i = 2,len dolocal temp = arr[i]local j = i-1while(j >= 1 and temp > arr[j]) doarr[j+1] = arr[j]j = j-1;endarr[j+1] = temp;end
endfunction SelectSort(arr)local len = #arrfor i = 1,len-1 dolocal maxNum = arr[i]local maxIndex = ifor j = i,len doif(arr[j] > maxNum) thenmaxNum = arr[j]maxIndex = jendendif(i~=maxIndex) thenarr[i],arr[maxIndex] = arr[maxIndex],arr[i]endend
endfunction QuickMainSort(arr,left,right)if(left>=right) thenreturn endlocal i = leftlocal j = rightlocal temp = arr[left]while(i<j) dowhile(temp>=arr[j] and i<j ) doj=j-1endwhile(temp<=arr[i] and i<j ) doi=i+1endif(i<j) thenarr[i],arr[j] = arr[j],arr[i]endendarr[left] = arr[i]arr[i] = tempQuickMainSort(arr,left,i-1)QuickMainSort(arr,i+1,right)
endfunction QuickSort(arr)QuickMainSort(arr,1,#arr)
endfunction Merge(arr,left,mid,right)if(left>=right) thenreturnendlocal tab_temp ={}local i=leftlocal k=mid+1while(i<=mid and k<=right) do  if(arr[i]>arr[k]) thentable.insert(tab_temp,arr[i])i=i+1else table.insert(tab_temp,arr[k])k=k+1endendwhile(i<=mid) dotable.insert(tab_temp,arr[i])i=i+1endwhile(k<=right) dotable.insert(tab_temp,arr[k])k=k+1endfor j=left,right doarr[j]=tab_temp[j-left+1]end
endfunction MergeMain(arr,left,right)if(left<right) thenlocal mid =  (left+right)//2MergeMain(arr,left,mid)MergeMain(arr,mid+1,right)Merge(arr,left,mid,right)end
endfunction MergeSort(arr)MergeMain(arr,1,#arr)
endfunction ShellSort(arr)local len = #arrfor gap=1,3 do    --这里可以倒序   gap从3到1  令4-gap = gap;for i=1,4-gap do  for j=i+4-gap,len dolocal temp = arr[j]local k = j-4+gap;while(k>=1 and temp>arr[k]) doarr[k+4-gap] = arr[k]k=k-4+gap;endarr[k+4-gap] = tempendendend
endfunction HeapBulid(arr,root,size)local left = root*2local right = root*2+1local largest = rootif(left<=size and arr[left] < arr[largest]) thenlargest = leftendif(right<=size and arr[right] < arr[largest])thenlargest = rightendif(largest~=root) thenarr[root],arr[largest] = arr[largest],arr[root]HeapBulid(arr,largest,size)end
endfunction HeapSort(arr)local len = #arr;local i=len//2while(i>=1) doHeapBulid(arr,i,len)i=i-1;endlocal j=lenwhile(j>1) doarr[1],arr[j] = arr[j],arr[1]j=j-1HeapBulid(arr,1,j)end
end--Main  Testa={}a=ArrInit(a)
io.write("NoSort:\n")
ShowArr(a)BubbleSort(a)
io.write("BubbleSort:\n")
ShowArr(a)
a=ArrInit(a)InsertSort(a)
io.write("InsertSort:\n")
ShowArr(a)
a=ArrInit(a)SelectSort(a)
io.write("SelectSort:\n")
ShowArr(a)
a=ArrInit(a)QuickSort(a)
io.write("QuickSort:\n")
ShowArr(a)
a=ArrInit(a)MergeSort(a)
io.write("MergeSort:\n")
ShowArr(a)
a=ArrInit(a)ShellSort(a)
io.write("ShellSort:\n")
ShowArr(a)
a=ArrInit(a)HeapSort(a)
io.write("HeapSort:\n")
ShowArr(a)
a=ArrInit(a)

Lua语言实现7种排序(冒泡排序,插入排序,选择排序,快速排序,归并排序,堆排序)相关推荐

  1. 冒泡排序,插入排序,选择排序三种算法的优劣

    https://www.jianshu.com/p/9f724c880124 最近听了王争老师的数据结构与算法之美,大有获益,特写此博客与大家分享. 排序算法太多了,但大体可以归结于三类,冒泡排序,插 ...

  2. 简单排序——冒泡排序,选择排序,插入排序,对象排序

    2019独角兽企业重金招聘Python工程师标准>>> 1)冒泡排序 package sort; /**  * 冒泡排序,每次把数组最大值送到未排序部分的最末端  * @author ...

  3. Python实现排序算法:冒泡排序,插入排序,选择排序,快速排序,希尔排序

    2019独角兽企业重金招聘Python工程师标准>>> import sys, getopt, randomdef bubble_sort(seq):for i in range(l ...

  4. C语言排序(桶排序,冒泡排序,选择排序,插入排序,快速排序)

    参考:C语言五大排序(桶排序,冒泡排序,选择排序,插入排序,快速排序)动态演示 作者:一只青木呀 发布时间: 2020-09-09 20:18:43 网址:https://blog.csdn.net/ ...

  5. c语言排序需要插空的最小次数,C语言数组排序——冒泡排序、选择排序、插入排序...

    一.冒泡排序 原理解析:(以从小到大排序为例)在一排数字中,将第一个与第二个比较大小,如果后面的数比前面的小,则交换他们的位置. 然后比较第二.第三个--直到比较第n-1个和第n个,此时,每一次比较都 ...

  6. 常见的五种排序,冒泡排序,选择排序,插入排序,并归排序,快速排序

    冒泡排序 冒泡排序介绍: 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法. 它重复地跑过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小)那么它就会按照大到小的 ...

  7. 八大排序(一):四种简单的排序(直接插入排序、希尔排序、冒泡排序、选择排序)

    源码地址: https://github.com/TimePickerWang/aimed-at-offer/blob/master/java%E6%BA%90%E7%A0%81/Sort.java ...

  8. c语言排序(快速排序,冒泡排序,选择排序,插入排序,桶排序)

    快速排序,冒泡排序,选择排序,插入排序,桶排序 文章目录 什么是排序 快速排序 实现流程 代码 改进版快速排序代码 注意点 冒泡排序 实现流程 实现代码 选择排序 实现代码 插入排序 实现代码 桶排序 ...

  9. C语言版--单链表排序,冒泡排序,选择排序,插入排序,快速排序,应有尽有,保证看懂,没有bug!交换节点版本!

    一.废话不多说,直接上代码.如果想看双向循环链表的朋友,可以在我的博客里找. 你好 #include <stdio.h> #include <stdlib.h>typedef ...

  10. java语言冒泡排序法_Java实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等...

    本文实现了八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序 首先是EightAlgorithms.java文件,代码如下: import jav ...

最新文章

  1. 代替国足踢决赛?马宁当选卡日大战第四官员
  2. 2000年考研英语阅读理解文章二
  3. 三张表有重复字段_什么?搞不定Kafka重复消费?
  4. 高晓松谈管理:自嘲总被员工管
  5. 分布式数据库在金融应用场景中的探索与实践
  6. crontab 定时任务
  7. 月薪14.5K...转行测试还是考公考研?律师小哥是这样选择的...
  8. 情感分析技术在美团的探索与应用
  9. java 提取文字内容_Java 提取PDF文本内容
  10. 路由器实验之配置实验、直连路由验证、静态路由
  11. 运营实操:亚马逊运营的顶级思维
  12. Elasticsearch创建索引
  13. 青蒿素发现者与两外籍科学家共获诺奖
  14. MongoDB之学习【一】:初识Mongo,路远道长,绵绵不绝
  15. 开环控制与闭环控制的简单笔记
  16. 神经生物学博士就业前景,神经网络硕士就业前景
  17. electron设置淘宝镜像
  18. HTML5期末作业:明星网站设计与实现——明星薛之谦介绍网页设计7个页面HTML+CSS+JavaScript
  19. Android 版本更新,支持增量更新
  20. Python wxPython基本教程

热门文章

  1. 基于PC虚拟机构建家用Linux服务器
  2. 2021年熔化焊接与热切割最新解析及熔化焊接与热切割找解析
  3. C++入门Step11【类 类型】
  4. 宽表:数据仓库 - “宽表”之争?
  5. 面向对象简答题:接口和抽象类的联系和区别?
  6. 【Matting】MODNet:实时人像抠图模型-笔记
  7. 微信公众号_接口测试_验证服务器有效性
  8. 计算机专升本基础笔记二 进制转换及二进制运算规则
  9. 谷歌账号怎么注册?(最新注册成功教程)
  10. 卷积的本质及物理意义(全面理解卷积)