zoukankan      html  css  js  c++  java
  • 理解 快速排序

    /**
        总体思路就是  [ 5 , 3, 65, 1, 6, 2]
    
        取出第一个【5】作为中心值  o  保存起来, 这样第一个值的位置就可以空出来 
    
        从最后一个 比较,   如果比 o 小,  就往左边 wz1 塞 , 【5】 空出来的位置 放入 【2】, 

    并且 j-- 缩小范围, 因为最后一个值已经参与比较, 而且移动位置了; 所以【2】得位置其实已经“空”出来了 在从第二个比较, i++, 如果比 o 大, 就往右边塞 , 【2】的位置放入 【65】
    然后从右边比较, 1小于5, 所以65空出来的位置放 如 1, 左边就变成了 2 3 1 右边 6 65
      然后继续while循环, 经过这几次循环就保证了 i 左边的数值都比o小, i右边的数字都比o大, i位置最后存放 o;
    第一轮结果: 2 3 1 (5) 6 65
       然后再递归处理 [2 3 1] 和 [ 6 65 ]
         
    */ function quickSort(arr,l,r){ //多余 if(l < r){ //保存 最左 最右 两个坐标 var i = l, j = r; //得到最左边的值 var lv = arr[i]; while( i<j ){ //进入到这个while条件是安全的 数字, 不用调换位置 while( i < j && arr[j] > lv ){ j--; } // 目的为了找到 左边比 lv 小的 // 主要是避免 i == j 的情况 if( i<j ){ // 把右边小的 放在 lv的位置, 右边就有一个空缺 arr[i] = arr[j]; i = i + 1; } //排除 , while( i < j && arr[i] < lv ){ i = i + 1; } //目的为了找到 左边比 lv大的 去填补 右边那个空缺 if( i < j ) { arr[j] = arr[i]; j = j - 1; } }      // 最后这里其实i已经是那个空缺的j, 因为i++之后, 和 j比较 arr[i] = lv; //一步一步操作, 还是对同一个数组, 比较节省空间 quickSort(arr, l, i-1); // 一步一步操作 quickSort(arr, i+1, r); } }   

    a
    = [5 , 3, 65, 1, 6, 2]
    quickSort(a,
    0, a.length -1 ); console.log(a)
  • 相关阅读:
    c++ 设计模式6 (Decorator 装饰模式)
    c++ 设计模式7 (Bridge 桥模式)
    c++ 设计模式8 (Factory Method 工厂方法)
    c++ 设计模式9 (Abstract Factory 抽象工厂模式)
    C++类设计2(Class with pointer members)
    C++类设计1(Class without pointer members)
    算法总结—链表
    C++对象内存模型1(堆栈模型)
    PHP 页面编码声明方法详解(header或meta)
    php变量与数组相互转换的方法(extract与compact
  • 原文地址:https://www.cnblogs.com/dhsz/p/6640766.html
Copyright © 2011-2022 走看看