Lua语言实现7种排序(冒泡排序,插入排序,选择排序,快速排序,归并排序,堆排序)
冒泡排序
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种排序(冒泡排序,插入排序,选择排序,快速排序,归并排序,堆排序)相关推荐
- 冒泡排序,插入排序,选择排序三种算法的优劣
https://www.jianshu.com/p/9f724c880124 最近听了王争老师的数据结构与算法之美,大有获益,特写此博客与大家分享. 排序算法太多了,但大体可以归结于三类,冒泡排序,插 ...
- 简单排序——冒泡排序,选择排序,插入排序,对象排序
2019独角兽企业重金招聘Python工程师标准>>> 1)冒泡排序 package sort; /** * 冒泡排序,每次把数组最大值送到未排序部分的最末端 * @author ...
- Python实现排序算法:冒泡排序,插入排序,选择排序,快速排序,希尔排序
2019独角兽企业重金招聘Python工程师标准>>> import sys, getopt, randomdef bubble_sort(seq):for i in range(l ...
- C语言排序(桶排序,冒泡排序,选择排序,插入排序,快速排序)
参考:C语言五大排序(桶排序,冒泡排序,选择排序,插入排序,快速排序)动态演示 作者:一只青木呀 发布时间: 2020-09-09 20:18:43 网址:https://blog.csdn.net/ ...
- c语言排序需要插空的最小次数,C语言数组排序——冒泡排序、选择排序、插入排序...
一.冒泡排序 原理解析:(以从小到大排序为例)在一排数字中,将第一个与第二个比较大小,如果后面的数比前面的小,则交换他们的位置. 然后比较第二.第三个--直到比较第n-1个和第n个,此时,每一次比较都 ...
- 常见的五种排序,冒泡排序,选择排序,插入排序,并归排序,快速排序
冒泡排序 冒泡排序介绍: 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法. 它重复地跑过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小)那么它就会按照大到小的 ...
- 八大排序(一):四种简单的排序(直接插入排序、希尔排序、冒泡排序、选择排序)
源码地址: https://github.com/TimePickerWang/aimed-at-offer/blob/master/java%E6%BA%90%E7%A0%81/Sort.java ...
- c语言排序(快速排序,冒泡排序,选择排序,插入排序,桶排序)
快速排序,冒泡排序,选择排序,插入排序,桶排序 文章目录 什么是排序 快速排序 实现流程 代码 改进版快速排序代码 注意点 冒泡排序 实现流程 实现代码 选择排序 实现代码 插入排序 实现代码 桶排序 ...
- C语言版--单链表排序,冒泡排序,选择排序,插入排序,快速排序,应有尽有,保证看懂,没有bug!交换节点版本!
一.废话不多说,直接上代码.如果想看双向循环链表的朋友,可以在我的博客里找. 你好 #include <stdio.h> #include <stdlib.h>typedef ...
- java语言冒泡排序法_Java实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等...
本文实现了八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序 首先是EightAlgorithms.java文件,代码如下: import jav ...
最新文章
- 代替国足踢决赛?马宁当选卡日大战第四官员
- 2000年考研英语阅读理解文章二
- 三张表有重复字段_什么?搞不定Kafka重复消费?
- 高晓松谈管理:自嘲总被员工管
- 分布式数据库在金融应用场景中的探索与实践
- crontab 定时任务
- 月薪14.5K...转行测试还是考公考研?律师小哥是这样选择的...
- 情感分析技术在美团的探索与应用
- java 提取文字内容_Java 提取PDF文本内容
- 路由器实验之配置实验、直连路由验证、静态路由
- 运营实操:亚马逊运营的顶级思维
- Elasticsearch创建索引
- 青蒿素发现者与两外籍科学家共获诺奖
- MongoDB之学习【一】:初识Mongo,路远道长,绵绵不绝
- 开环控制与闭环控制的简单笔记
- 神经生物学博士就业前景,神经网络硕士就业前景
- electron设置淘宝镜像
- HTML5期末作业:明星网站设计与实现——明星薛之谦介绍网页设计7个页面HTML+CSS+JavaScript
- Android 版本更新,支持增量更新
- Python wxPython基本教程