JS数据结构------ 快速排序 拆解

快速排序的平均效率是O(N * logN).

手撕鬼子开始~

1. 封装添加元素方法

ArrayList.prototype.insert=function(item){
       this.array.push(item)
   }
2. 封装交换位置方法

   ArrayList.prototype.swap=function(m,n){
       var temp = this.array[m]
       this.array[m]=this.array[n]
       this.array[n]= temp
   }
3.封装选取枢纽方法

我们要选取一个枢纽 pivot 
为了使我们节省内存空间 选取中位数
     左大于右 交换 
     中间大于右 交换
     此时还需要判断变化后的 左和中间位置 进行交换
     
 ArrayList.prototype.point=function(left,right){
        // 取中位数
        var center =  Math.floor((left+right)/2)
        // 进行位置交换
        if(this.array[left]>this.array[center]){
            this.swap(left,center)

        }
        if(this.array[center]>this.array[right]){
            this.swap(center,right)
            
        }
        if(this.array[left]>this.array[center]){
            this.swap(left,center)
            
        }

        this.swap(center,right-1)

        return this.array[right-1]


   }

4.递归操作

 ArrayList.prototype.quick=function(){
       this.quickSort(0,this.array.length-1)

   }

   ArrayList.prototype.quickSort=function(left,right){
       //判断递归结束条件
    if(left>=right) return
       //获取中位数 枢纽
    var point =this.point(left,right)
       //记录左右开始的位置
    var i=left

    var j=right-1
        //循环判断开始
    while(i<j){
         
        while(this.array[++i]<point) { }
        while(this.array[--j]>point) { }
//使用两个while循环
//递归的查找合适的i(大于枢纽的值)和合适的j(小于枢纽的值).
        if(i<j){
            this.swap(i,j)
        }else{
            break
        }
    }
    //将枢纽放在正确的位置
    this.swap(i,right-1)
     //递归左半段 递归右半段
     this.quickSort(left,i-1)
   this.quickSort(i+1,right)

   }
  

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值