Lua语言写的几个简单排序(1)

来源:互联网 发布:淘宝时尚男装店铺 编辑:程序博客网 时间:2024/05/16 09:53

本文主要用lua语言写了:冒泡排序,简单选择排序,快速排序三种排序方法。

原理就不多说了,你懂的。直接贴代码:

--[[print an array with some descriptionsdescriptions  打印array之前的描述信息array 需要打印的数组--]]function show(descriptions,array)io.write(descriptions,"\n\r\t")for i,value in ipairs(array) doio.write(value)if array[i+1] thenio.write(",")endendio.write("\n\r")end--[[获取数组的长度--]]function GetArrayLength(array)local n=0;while array[n+1] don=n+1endreturn n;end--[[冒泡排序array 需要排序的数字compareFunc 比较函数--]]function bubbleSort(array,compareFunc)local len = GetArrayLength(array)local i = lenwhile i > 0 doj=1while j< len doif compareFunc(array[j],array[j+1]) thenarray[j],array[j+1] = array[j+1],array[j]endj = j + 1endi = i - 1endend--[[选择排序算法array 需要排序的数字compareFunc 比较函数--]]function selectSort(array,compareFunc)local len = GetArrayLength(array)local i = 1while i <= len dolocal j= i + 1while j <=len doif compareFunc(array[i],array[j]) thenarray[i],array[j] = array[j],array[i]endj = j + 1endi = i + 1endend--[[快速排序方便统一调用array 需要排序的数字compareFunc 比较函数--]]function quickSort(array,compareFunc)quick(array,1,GetArrayLength(array),compareFunc)end--[[快速排序array 需要排序的数字left  左边已经完成比较的数组下标right 右边已经完成比较的数组下标compareFunc 比较函数--]]function quick(array,left,right,compareFunc)if(left < right ) thenlocal index = partion(array,left,right,compareFunc)quick(array,left,index-1,compareFunc)quick(array,index+1,right,compareFunc)endend--[[快速排序的一趟排序array 需要排序的数字left  左边已经完成比较的数组下标right 右边已经完成比较的数组下标compareFunc 比较函数--]]function partion(array,left,right,compareFunc)local key = array[left] -- 哨兵  一趟排序的比较基准local index = leftarray[index],array[right] = array[right],array[index] -- 与最后一个元素交换local i = leftwhile i< right doif compareFunc( key,array[i]) thenarray[index],array[i] = array[i],array[index]-- 发现不符合规则 进行交换index = index + 1endi = i + 1endarray[right],array[index] = array[index],array[right] -- 把哨兵放回return index;endarray={5,6,7,9,2,3,4,8,1,12,11,10}show("original array",array)bubbleSort(array, function(x,y) return x<y end)show("after bubbleSort array",array)selectSort(array, function(x,y) return y<x end)show("after selectsort array", array)quickSort(array, function(x,y) return x<y end)show("after quickSort array", array)


原创粉丝点击