函数quickSort(arr){ //如果数组只有一个数字,直接返回;if(arr . length 1){ return arr;}//查找中间数字的索引值;如果是浮点数,则向下舍入varcenter index=math . floor(arr . length/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。下图
第二次调用该函数
,执行时返回快速排序(arrleft)。concat (centernum,quick sort(arr right));
快速排序(arrLeft)将调用该函数,传递的参数为[33,18,2,16,27]
中间的数字是2,小的在左边,大的在右边
最后,调用快速排序
在同一个循环中调用自己,直到传入参数的长度小于1,然后返回传入参数。
以上就是本文的全部内容,希望对大家有所帮助,谢谢大家的支持!