lua中快速排序的理解
2018-01-21 16:25
555 查看
快速排序的时间复杂度是:O(n * log(n))
快速排序的主要思想是分治思想
快速排序是找出一个元素作为基准,然后对数组进行分区操作,是基准左边的元素的值不大于基准值,基准右边的元素值,都不少于基准值,如此作为基准的元素调整到排序后的正确位置.
运行结果
after order--------
printT ---------------
1 -3444
2 -3344
3 -2
4 1
5 2
6 3
7 77
8 334
9 344
10 345
11 667
12 3334
---------------
[Finished in 0.1s]
快速排序的主要思想是分治思想
快速排序是找出一个元素作为基准,然后对数组进行分区操作,是基准左边的元素的值不大于基准值,基准右边的元素值,都不少于基准值,如此作为基准的元素调整到排序后的正确位置.
--[[-- - partition: 获得快排中介值位置 - @param: list, low, high - 参数描述 - @return: pivotKeyIndex - 中介值索引 ]] function partition(list, low, high) local low = low local high = high local pivotKey = list[low] -- 定义一个中介值 -- 下面将中介值移动到列表的中间 -- 当左索引与右索引相邻时停止循环 while low < high do -- 假如当前右值大于等于中介值则右索引左移 -- 否则交换中介值和右值位置 while low < high and list[high] >= pivotKey do high = high - 1 end swap(list, low, high) -- 假如当前左值小于等于中介值则左索引右移 -- 否则交换中介值和左值位置 while low < high and list[low] <= pivotKey do low = low + 1 end swap(list, low, high) end return low end --[[-- - orderByQuick: 快速排序 - @param: list, low, high - 参数描述 - @return: list - table ]] function orderByQuick(list, low, high) if low < high then -- 返回列表中中介值所在的位置,该位置左边的值都小于等于中介值,右边的值都大于等于中介值 local pivotKeyIndex = partition(list, low, high) -- 分别将中介值左右两边的列表递归快排 orderByQuick(list, low, pivotKeyIndex - 1) orderByQuick(list, pivotKeyIndex + 1, high) end end function swap(list,low,high) local temp = 0 temp = list[low] list[low] = list[high] list[high] = temp end local printT = function(t) print("printT ---------------") table.walk(t, function(v, k) print(k, v) end) print("---------------") end function table.walk( t, fn ) for k, v in pairs( t ) do fn( v, k ) end end local test_list = {1,2,-2,3,-3444,-3344,3334,334,344,345,667,77} local num = #test_list orderByQuick(test_list, 1, num) -- 总结 print("after order--------") printT(test_list)
运行结果
after order--------
printT ---------------
1 -3444
2 -3344
3 -2
4 1
5 2
6 3
7 77
8 334
9 344
10 345
11 667
12 3334
---------------
[Finished in 0.1s]
相关文章推荐
- 快速排序(更好理解)
- Lua快速插入排序
- 快速排序(更好理解)
- 最好理解的快速排序 :实例解析输入数组,排序
- lua 快速排序
- 冒泡,快速,选择排序之理解
- 对比快速排序,理解归并排序
- 快速排序 小讲 - (二)【 理解 + 例题 】 更新 ing...
- 快速排序的理解
- 快速排序挖坑法理解与实现
- 快速排序的两种写法(站在巨人的肩膀上加深理解)
- lua中冒泡排序的理解
- 快速排序的理解
- 快速排序精简版总容易理解版
- 快速排序一种易于理解的方式实现
- 快速排序理解(挖坑填数策略)
- 快速排序的理解
- 【算法理解】—— 快速排序 v2.0
- 快速排序lua实现 递归和栈两种实现
- 1063 sicily (木有准确理解题意,一直wrong error)——不过这事快速排序的一次复习,还是记录一下