美文网首页
排序算法

排序算法

作者: kevin5979 | 来源:发表于2019-12-06 18:19 被阅读0次

排序算法详细介绍点击这里

部分排序代码实现

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>

<body>
  <script>
    function ArrayList() {
      //属性
      this.array = []

      //方法
      //insert方法
      ArrayList.prototype.insert = function (item) {
        this.array.push(item)
      }

      //toString方法
      ArrayList.prototype.toString = function () {
        return this.array.join('-')
      }

      //交换两个数据的位置
      ArrayList.prototype.swap = function (m, n) {
        var temp = this.array[m]
        this.array[m] = this.array[n]
        this.array[n] = temp
      }

      //简单排序算法 《 时间复杂度 O(n^2) 》
      //1.冒泡排序 《 比较次数: O(n^2) 交换次数:O(n^2) 》
      ArrayList.prototype.bubbleSort = function () {
        var length = this.array.length
        for (var i = length - 1; i >= 0; i--)
          for (var j = 0; j < i; j++) {
            if (this.array[j] > this.array[j + 1]) {
              //交换位置
              this.swap(j, j + 1)
            }
          }
      }

      //2.选择排序 《 比较次数: O(n^2) 交换次数:O(n) 》
      ArrayList.prototype.selectionSort = function () {
        var length = this.array.length
        for (var i = 0; i < length - 1; i++) {
          var min = i //记录最小值下标
          for (var j = min + 1; j < length; j++) {
            if (this.array[min] > this, array[j]) {
              min = j
            }
            if (min != i) {
              this.swap(min, i)
            }
          }
        }
      }

      //3.插入排序(效率比冒泡、选择高) 《 比较次数: O(n^2) 交换次数:O(n) 》
      ArrayList.prototype.insertionSort = function () {
        var length = this.array.length

        for (var i = 1; i < length; i++) {
          var temp = this.array[i]
          var j = i
          while (this.array[j - 1] > temp && j > 0) {
            //依次往后
            this.array[j] = this.array[j - 1]
            j--
          }

          //插入temp
          this.array[j] = temp
        }
      }

      //高级排序算法
      //1.希尔排序《 最坏为O(n^2),通常情况要好于O(n^2) 》
      ArrayList.prototype.shellSort = function () {
        var length = this.array.length

        //初始化增量
        var gap = Math.floor(length / 2)

        //gap不断减小
        while (gap >= 1) {
          //以gap为间隔,进行分组并排序
          for (var i = gap; i < length; i++) {
            var temp = this.array[i]
            var j = i
            while (this.array[j - gap] > temp && j > gap - 1) {
              this.array[j] = this.array[j - gap]
              j -= gap
            }
            //将j位置元素赋值temp
            this.array[j] = temp
          }
          //增量变化
          gap = Math.floor(gap / 2)
        }
      }

      //2.快速排序(最快) 《 平均复杂度 O(n * log()n) 》
      //2.1选择枢纽
      ArrayList.prototype.median = function (left, right) {
        //取出中间位置
        var center = Math.floor((left + right) / 2)

        //判断大小并交换位置
        if (this.array[left] > this.array[center]) {
          this.swap(left, center)
        }
        if (this.array[left] > this.array[right]) {
          this.swap(left, right)
        }
        if (this.array[center] > this.array[right]) {
          this.swap(center, right)
        }

        //将center换到 right - 1 的位置
        this.swap(center, right - 1)

        return this.array[right - 1]
      }

      //2.2方法的实现
      ArrayList.prototype.quickSort = function () {
        this.quick(0, this.array.length - 1)
      }
      //2.2递归函数
      ArrayList.prototype.quick = function (left, right) {
        //结束条件
        if (left >= right) return

        //获取枢纽
        var pivot = this.median(left, right)

        //定义变量记录当前位置
        var L = left
        var R = right

        //进行交换
        while (true) {
          while (this.array[++L] < pivot) { }
          while (this.array[--R] > pivot) { }
          if (L < R) {
            this.swap(L, R)
          } else {
            break
          }
        }

        //将枢纽放置在正确的位置
        this.swap(L, right - 1)

        //分而治之
        this.quick(left, L - 1)
        this.quick(L + 1, right)
      }

    }

  </script>
</body>

</html>
END

相关文章

  • java实现快速排序、归并排序、希尔排序、基数排序算法...

    快速排序算法 归并排序算法 希尔排序算法 基数排序算法

  • web开发需要知道的几个算法

    算法分类 快速排序算法 深度优先算法 广度优先算法 堆排序算法 归并排序算法

  • 算法学习(1)-排序算法

    八大排序算法九大排序算法再总结[经典排序算法][集锦][直观学习排序算法] 视觉直观感受若干常用排序算法 快速排序...

  • 经典排序算法总结

    经典排序算法集锦 冒泡法 排序算法入门之冒泡排序 排序算法入门之冒泡排序优化

  • 前端算法学习-第一篇

    冒泡排序算法 冒泡排序算法是最慢的排序算法之一,也是最容易实现的排序算法。之所以叫冒泡排序是因为使用这种算法排序时...

  • 七大排序算法之冒泡排序

    七大排序算法之冒泡排序 @(算法笔记)[排序算法, 冒泡排序, C++实现] 冒泡排序介绍 冒泡排序是七大排序算法...

  • 算法-选择排序

    算 法:选择排序算法时间复杂度: 选择排序算法概述 选择排序伪代码 选择排序实现 选择排序算法概述 排序算法有许...

  • 浅谈排序算法

    排序算法有很多种,今天先谈谈一些简单的排序算法。包括桶排序、冒泡排序和快速排序算法。后期总结各种排序算法。 桶排序...

  • 线性排序

    桶排序、计数排序、基数排序 一、线性排序算法介绍 1.线性排序算法包括桶排序、计数排序、基数排序。2.线性排序算法...

  • 算法4:插入排序和选择排序算法的比较

    排序算法列表电梯: 选择排序算法:详见 《算法4》2.1 - 选择排序算法(Selection Sort), Py...

网友评论

      本文标题:排序算法

      本文链接:https://www.haomeiwen.com/subject/swetgctx.html