JS排序算法之快速排序

快速排序和归并排序都是采用二分法的排序算法。都是 Olog N

不过快速排序更复杂一些。

快递排序跟归并排序的区别是顺序,它是先总后分。

不断地从断点分,让左边的数都小于断点,右边都大于断点。然后迭代切分。

复制代码
 1 var group= [1,9,3,5,0,4,2,8];
 2 
 3 function swap (k,y,arr) {
 4     var aux = arr[k];
 5     arr[k] = arr[y];
 6     arr[y]=aux;
 7         
 8 };
 9 
10 function quickSort(list) {
11 
12     return quick(list,0,list.length-1); 
13 
14 }
15 
16 function quick(array,left,right) {//主方法用来递归 和传递数组
17     if (array.length >1){
18             var index = shear(array,left,right);
19 
20             if(left<index-1){//返回位置的前面还有未排序的
21                 quick(array,left,index-1);
22                 }
23             if(right>index){//后面还有未排序的,递归
24                 quick(array,index,right);
25             }
26 
27     }
28     return array;
29 };
30 function shear(array,left,right) {
31     var pivot = array[Math.floor((left+right)/2)];
32     var nl = left;
33     var nr = right;
34     while(nl<=nr){
35         while( array[nl] < pivot){ //找左边的比pivot更大的值
36             nl++;
37         }
38         while( array[nr] > pivot ){ //找右边的比pivot更小的值
39             nr--;
40         }
41         if(nl <= nr){//如果找到的两个数是左右的顺序,那么交换
42             swap(nl,nr,array);
43             nl++;
44             nr--;
45         }
46 
47     }
48     return nl;//返回用来创建子数组的位置。该位置的左侧都是小于pivot的值,该位置及其右侧都是大于等于pivot的。
49 
50 }
51 quickSort(group);
复制代码

 

posted @   Esther_Cheung  阅读(277)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示