zoukankan      html  css  js  c++  java
  • 排序算法(06. 快速排序)

    一.快速排序的重要性

    1.快速排序几乎可以说是目前所有排序算法中,最快的一种排序算法。
    当然,没有任何一种算法是在任何情况下都是最优的。
    比如 希尔排序 确实在某些情况下可能好于快速排序。
    但是大多数情况下,快速排序还是比较好的选择
    
    2.快速排序被列为20世纪十大算法之一

    二.什么是快速排序

    三.快速排序过程图解

    四.快速排序中枢纽(pivot)的选择

    取 头 中 尾 三个数的中位数 作为枢纽
    

    五.代码实现

    //交换方法
            ArrayList.prototype.swap = function (i, j) {
              var temp = this.array[i];
              this.array[i] = this.array[j];
              tjhis.array[j] = temp;
            };
    
            //定义一个寻找枢纽的方法
            ArrayList.prototype.median = function (left, right) {
              var center = Math.floor((left + right) / 2);
              // 1.将找到的首, 中, 尾三个位置的数字按有小到大排序
              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);
              }
              // 2.把找到的枢纽,即中间位置的数,放到倒数第二个数的位置
              this.swap(center, right - 1);
            };
            //快速排序
            ArrayList.prototype.quickSort = function () {
              this.quick(0, this.array.length - 1);
            };
            //定义递归哈函数
            ArrayList.prototype.quick = function (left, right) {
              //递归出口
              if (left >= right) return;
              //找到枢纽
              var pivot = this.median(left, right);
              //进行交换操作
              var i = left;
              var j = right - 1;
              while (true) {
                while (this.array[++i] < pivot) {}
                while (this.array[--j] > pivot) {}
                if (left < right) {
                  this.swap(i, j);
                } else {
                  break;
                }
              }
              //把枢纽放到属于他的位置
              this.swap(i, right - 1);
              //利用分治思想
              this.quick(left, i - 1);
              rhis.quick(i + 1, right);
            };
    

    六.效率分析:

  • 相关阅读:
    字符串替换
    字符串查找
    字符串比较
    字节与字符串相互转换
    1365. How Many Numbers Are Smaller Than the Current Number
    1486. XOR Operation in an Array
    1431. Kids With the Greatest Number of Candies
    1470. Shuffle the Array
    1480. Running Sum of 1d Array
    【STM32H7教程】第56章 STM32H7的DMA2D应用之刷色块,位图和Alpha混合
  • 原文地址:https://www.cnblogs.com/jackson1/p/12711437.html
Copyright © 2011-2022 走看看