排序算法:图解快速排序算法--附带基于Python和JavaScript的实现
Posted 黄梦风
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法:图解快速排序算法--附带基于Python和JavaScript的实现相关的知识,希望对你有一定的参考价值。
快速排序有三大要素 分别是
第一:找基准值--key
第二:分区
第三:比较数字大小
先来看下快速排序流程: 基准值key选取了第一个元素78 基准值是可以任意一个元素
因为选择了最左边的数据,那么就从右边开始遍历
经过上一轮变化key变成了78 位置也变了,开始从key的左边遍历,当 i=j的时候,结束遍历,开始分区
分区后,每个区再进行上面的比较
继续分区,直到分区里面只有两个或者3个元素,分区后,每个分区继续比较
现在每个分区已经最小了,获得最后排列的值
Python实现过程(正序),一共13行代码
def quickSortASC(nums,start,end): #start 和 end用于 分区,当start=end的时候不进行递归 if start < end: i,j = start,end key = nums[i] while i < j: while (i<j) and (key<=nums[j]): j = j-1 #交换 nums[i],nums[j] = nums[j],nums[i] while (i<j) and (key>=nums[i]): i=i+1 #交换 nums[j],nums[i] = nums[i],nums[j] #nums[i] = key #开始递归 quickSortASC(nums,start,i) quickSortASC(nums,i+1,end)
调用
if __name__ == "__main__": num_arr = [23, 34, 544, 234, 54, 554, 78, 656] quickSortASC(num_arr,0,len(num_arr)-1) print(num_arr)#[23, 34, 54, 78, 234, 544, 554, 656]
JavaScript 实现代码
function swap_arr(arr,i,j){ var tmp = arr[i] arr[i] = arr[j] arr[j] = tmp } function quickSortASC(nums, start, end) { if(start < end) { var i = start var j = end var poit = nums[start] console.log(i, j, poit) while(i < j) { while(i<j&&poit<=nums[j]){ j-- } swap_arr(nums,i,j) while(i<j&&poit>=nums[i]){ i++ } swap_arr(nums,i,j) } quickSortASC(nums,start,i) quickSortASC(nums,i+1,end) } } num_arr = [23, 34, 544, 234, 17, 554, 78, 656] quickSortASC(num_arr,0,7) console.log(num_arr)//17,23,34,78,234,544,554,656
以上是关于排序算法:图解快速排序算法--附带基于Python和JavaScript的实现的主要内容,如果未能解决你的问题,请参考以下文章