js实现快速排序法,其平均时间复杂度为O(nlogn)

 function fn(arr) {

      // 1.
      this.arr = arr;

    }
    fn.prototype.swap = function (m, n) {
      var temp = this.arr[m]
      this.arr[m] = this.arr[n]
      this.arr[n] = temp
    }
    fn.prototype.quickSort = function () {
      this.quick(0, this.arr.length - 1)
    }
    fn.prototype.quick = function (left, right) {
      if (left >= right) { return }
      // 2.获取中间数
      var mid = this.medain(left, right)
      // 3.定义变量,用于记录当前找到的位置
      var i = left
      var j = right - 1
      while (true) {
        while (this.arr[++i] < mid) { }
        while (this.arr[--j] > mid) { }
        if (i < j) {
          this.swap(i,j)
        } else {
          break;
        }
      }
      if (i < right) {
        this.swap(i, right - 1)
      }
      //递归
      this.quick( left, i - 1)
      this.quick( i + 1, right);

    }
    // 获取枢纽
    fn.prototype.medain = function (i, j) {
      var center = Math.floor((i + j) / 2);
      if (this.arr[i] > this.arr[center]) {
        this.swap(i,center)
      }
      if (this.arr[i] > this.arr[j]) {
        this.swap(i,j)
      }
      if (this.arr[center] > this.arr[j]) {
        this.swap(center,j)
      }
      // 把中间数放到倒数第二的位置
      this.swap(center ,j-1);

      return this.arr[j-1]
    }
    // 快速排序法 测试代码

    var arr = [2, 4, 1, 8, 5, 3, 11];
  
    var sort = new fn(arr)
    // 
    alert(sort.arr);
    
    sort.quickSort();
    alert(sort.arr);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值