• 排序算法(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);
            };
    

    六.效率分析:

  • 相关阅读:
    Linux:Day7(上) find、文件特殊权限、if语句
    Linux:Day6(下) vim编辑器
    Linux:Day6(上) egrep、条件测试
    Linux:Day5 shell编程初步、grep
    Linux:Day4(下) 用户及组管理
    Linux中的cat、more、less、head、tail命令
    ajax中的contendType和dataType知识点梳理
    Django使用jsonp和cors解决跨域请求问题
    Django的Modelforms的介绍
    Django的Rbac介绍3
  • 原文地址:https://www.cnblogs.com/jackson1/p/12711437.html
Copyright © 2020-2023  润新知