lua 排序

本文源自: http://blog.csdn.net/wziyx513225244/article/details/8439648


  1. --[[  
  2. print an array with some descriptions  
  3.     descriptions  打印array之前的描述信息  
  4.     array 需要打印的数组  
  5. --]]  
  6. function show(descriptions,array)  
  7.     io.write(descriptions,"\n\r\t")  
  8.     for i,value in ipairs(array) do  
  9.         io.write(value)  
  10.         if array[i+1] then  
  11.             io.write(",")  
  12.         end  
  13.     end  
  14.     io.write("\n\r")  
  15. end  
  16. --[[  
  17. 获取数组的长度  
  18. --]]  
  19. function GetArrayLength(array)  
  20.     local n=0;  
  21.     while array[n+1] do  
  22.         n=n+1  
  23.     end  
  24.     return n;  
  25. end  
  26. --[[  
  27. 冒泡排序  
  28.     array 需要排序的数字  
  29.     compareFunc 比较函数  
  30. --]]  
  31. function bubbleSort(array,compareFunc)  
  32.     local len = GetArrayLength(array)  
  33.     local i = len  
  34.     while i > 0 do  
  35.         j=1  
  36.         while j< len do  
  37.             if compareFunc(array[j],array[j+1]) then  
  38.                 array[j],array[j+1] = array[j+1],array[j]  
  39.             end  
  40.             j = j + 1  
  41.         end  
  42.         i = i - 1  
  43.     end  
  44. end  
  45.   
  46.   
  47. --[[  
  48. 选择排序算法  
  49.     array 需要排序的数字  
  50.     compareFunc 比较函数  
  51. --]]  
  52. function selectSort(array,compareFunc)  
  53.     local len = GetArrayLength(array)  
  54.     local i = 1  
  55.     while i <= len do  
  56.         local j= i + 1  
  57.         while j <=len do  
  58.             if compareFunc(array[i],array[j]) then  
  59.                 array[i],array[j] = array[j],array[i]  
  60.             end  
  61.             j = j + 1  
  62.         end  
  63.         i = i + 1  
  64.     end  
  65. end  
  66.   
  67. --[[  
  68. 快速排序方便统一调用  
  69.     array 需要排序的数字  
  70.     compareFunc 比较函数  
  71. --]]  
  72. function quickSort(array,compareFunc)  
  73.     quick(array,1,GetArrayLength(array),compareFunc)  
  74. end  
  75.   
  76. --[[  
  77. 快速排序  
  78.     array 需要排序的数字  
  79.     left  左边已经完成比较的数组下标  
  80.     right 右边已经完成比较的数组下标  
  81.     compareFunc 比较函数  
  82. --]]  
  83. function quick(array,left,right,compareFunc)  
  84.     if(left < right ) then  
  85.         local index = partion(array,left,right,compareFunc)  
  86.         quick(array,left,index-1,compareFunc)  
  87.         quick(array,index+1,right,compareFunc)  
  88.     end  
  89. end  
  90.   
  91. --[[  
  92. 快速排序的一趟排序  
  93.     array 需要排序的数字  
  94.     left  左边已经完成比较的数组下标  
  95.     right 右边已经完成比较的数组下标  
  96.     compareFunc 比较函数  
  97. --]]  
  98. function partion(array,left,right,compareFunc)  
  99.     local key = array[left] -- 哨兵  一趟排序的比较基准  
  100.     local index = left  
  101.     array[index],array[right] = array[right],array[index] -- 与最后一个元素交换  
  102.     local i = left  
  103.     while i< right do  
  104.         if compareFunc( key,array[i]) then  
  105.             array[index],array[i] = array[i],array[index]-- 发现不符合规则 进行交换  
  106.             index = index + 1  
  107.         end  
  108.         i = i + 1  
  109.     end  
  110.     array[right],array[index] = array[index],array[right] -- 把哨兵放回  
  111.     return index;  
  112. end  
  113.   
  114.   
  115. array={5,6,7,9,2,3,4,8,1,12,11,10}  
  116. show("original array",array)  
  117.   
  118. bubbleSort(array, function(x,y) return x<y end)  
  119. show("after bubbleSort array",array)  
  120. selectSort(array, function(x,y) return y<x end)  
  121. show("after selectsort array", array)  
  122. quickSort(array, function(x,y) return x<y end)  
  123. show("after quickSort array", array) 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值