当前位置: 首页 > Web前端 > HTML5

算法系列—JavaScript快速排序思想

时间:2023-04-05 01:51:27 HTML5

原理的实现快速排序离不开递归的思想。不懂递归的可以结合我的另一篇文章学习算法导论中递归分治思想的实现。网上有有趣的动态图为快速排序,但其实我们大部分程序员都是那种脑子不太灵光的。即使看到了生动的动态画面,我们还是想不出具体的实现思路。排序有基本的步骤,快速排序也不例外。通常分为几个步骤:1.选择基准值;2.需要两个空数组,分别位于基准值的左右,小于基准值的推到左边,大于基准值的数组推到右边的数组;3.递归重复上述步骤。具体思路分析原数组[2,4,1,5,3,1]找到末尾元素1的参考值basesplitleft[1]<-[base]->[2,4,5,3]rightrecursivepair左右数组重复第一步找到新的参考值模拟递归1[1],[1],[2]<-[3]->[4,5]模拟递归2[1],[1],[2],[3],[4]<-[5]->[]递归结束,合并数组[...[1],...[1],...[2],...[3],...[4],...[5]]这张表模拟了快速排序的具体步骤。递归是将一个规则重复N次的操作。我们找到快排的规律,然后返回Recursion,当递归到一个元素为1的数组时,不再递归,因为只剩下一个元素的数组不需要比较。JavaScript源码实现快速排序的理论很容易理解,但实际写代码时往往难以下手。下面是我根据快速排序的步骤实现的递归快速排序。qSort函数并不复杂。意思是执行一个查找参考值和遍历比较的过程。你可能不理解的是函数末尾的return。return[...qSort(left),...[base],...qSort(right)]分隔此返回。1、返回值应该是一个数组。return[]2.合并第一次快速排序的左、基、右数组。然后交给递归来进行左右数组的排序。return[qSort(left),[base],qSort(right)]3.因为qSort返回的是数组,不是数组元素,所以需要用ES6语法...来hash。完整代码:functionqSort(arr){//声明并初始化左数组和右数组varleft=[],right=[]//使用数组的最后一个元素作为基值varbase=arr[arr.length-1]//当数组长度仅为1或为空时,不排序直接返回数组if(arr.length<=1)returnarr//遍历for(vari=0,len=arr.length;i