参考 :http://blog.csdn.net/hguisu/article/details/7776068

    1. --[[1)选择一个基准元素,通常选择第一个元素或者最后一个元素,
    2. 2)通过一趟排序讲待排序的记录分割成独立的两部分,其中一部分记录的元素值均比基准元素值小。另一部分记录的 元素值比基准值大。
    3. 3)此时基准元素在其排好序后的正确位置
    4. 4)然后分别对这两部分记录用同样的方法继续进行排序,直到整个序列有序。--]]
    5. function swap(i1,i2,arr)
    6. local tmp = arr[i2]
    7. arr[i2] = arr[i1]
    8. arr[i1] = tmp
    9. end
    10. function partition(arr,low,high)
    11. local privotKey
    12. privotKey = arr[low]
    13. while(low < high)do
    14. --从表的两端交替地向中间扫描,
    15. --从high 所指位置向前搜索 --将比基准元素小的交换到低端
    16. while(low < high and arr[high] >= privotKey) do
    17. high = high - 1
    18. end
    19. swap(low,high,arr)
    20. --从low 所指位置向后搜索
    21. while(low < high and arr[low] <= privotKey ) do
    22. low = low + 1
    23. end
    24. swap(low, high,arr)
    25. end
    26. return low
    27. end
    28. function quickSort(arr,low,high)
    29. if low < high then
    30. local privotLoc = partition(arr,low,high); --将表一分为二
    31. quickSort(arr,low,privotLoc -1); --递归对低子表递归排序
    32. quickSort(arr,privotLoc + 1, high); --递归对高子表递归排序
    33. end
    34. end
    35. arr = {3,3,3,3,3,9,8,7,6,5,4}
    36. quickSort(arr,1,#arr)
    37. print(table.concat(arr,","))