核心代码:复制的代码如下:函数quickSort(arr){ //如果数组只有一个数字,直接返回;if(arr . length 1){ return arr;}//查找中间数字的索引值;如果是浮点数,向下舍入varcenter index=math。地板(arr。长度/2);//根据这个中间数的索引值找到这个数的值;var CenterNum=arr . splice(CenterIndex,1);//将数字存储在左边var arrLeft=[];//将数字存储在右边var arr right=[];for(I=0;长度;I){ if(arr[I]center num){ arr left . push(arr[I])} else if(arr[I]center num){ arr right . push(arr[I])} }返回quickSort(arrLeft)。concat(centerNum,quick sort(arr right));};var arrSort=[33,18,2,40,16,63,27];var arr1=快速排序(arr sort);console . log(arr 1);主要原理是:快速排序原理:找到参考点,建立两个数组分别存储,递归参考点:在这个数组中间找到一个数字;创建两个数组分别存储:使用该引用点将其左右值分别存储在两个已定义的新数组中;递归:在函数内部调用自己;我在这里总结的一件事是,当使用递归时:1。要有判断,要有回报;否则就是无限循环;2.在内部调用自己时,传递的参数是内部定义的变量,与第一个传递的参数相关;3.要执行同样的工作,考虑递归;这是第一次执行函数的变量:中间数是40;根据循环中的判断条件,小于40的存储在arrLeft,大于40的存储在arrRight。下图。
第二次调用该函数时,它被执行以返回quicksort (arrleft)。concat (centernum,quick sort(arr right));快速排序(arrLeft)将调用该函数,传递的参数为[33,18,2,16,27]。中间的数字是2,小于2的放在左arrLeft,大于2的放在右arrright 。
最后,在调用quickSort(arrRight)后,在同一个循环中调用自己,直到传入参数的长度小于1,然后返回传入参数。