zoukankan      html  css  js  c++  java
  • 基础算法之快速排序

    最近在看博客的时候,看到一篇讲快速排序的,联想到自己什么排序都不懂,就想着弄懂这个快速排序。由于脑子不太灵光,所以花了好久才弄个大概。在这里记录下学习成果。

    快速排序 我的理解就是取数组中的随便一个值,然后将比他大的都放在后面,比他小的都放在前面。然后在对前面和后面的数据进行同样的操作

    1.假如有个数组,如果随便取数据,那么就取第一个。

    即第一个为”7“

    ①定义一个值,j,为数组的长度-1,现在是7。从j的位置开始向前找(j>=i),找到第一个小于7(即 j = 7的时候)的值,然后将这个位置的值赋为 7 所在的位置,即第一个

    即现在的数组为,

    ②定义一个值,i,默认为0.然后从 i 的位置开始向后找(i<=j),找到第一个大于7(即 i = 4 的时候)的值,然后将这个值赋给给 j 位置

    现在的数组为

    ③ 再从j(j现在的是为7)的位置向前找(j>=i),找到第一个小于7的值的位置,但是当 j = i = 4 的时候,发现并没有找到。此时就将第一个值,7 放在 j = i =4 的位置 

    第一遍排序的数组为

    ④ 如果数据比较多,重复1,2步骤。

    ⑤ 然后用递归,排序 0~3,5~7

    ⑥ 用js排序的代码是

    function quickSort(arr){
        if(!arr.length) return arr;
        var i=0;
        var j=arr.length-1;
        var x = arr[0];
        while(i<j){
            
            while(arr[j]>=x&&i<j){
                j--;
            }
            arr[i] = arr[j];
            //arr[i]一定是 <= x 否则出现重复数据,会无限死循环。
            while(arr[i]<=x&&i<j){
                i++;
            }
            arr[j] = arr[i];
        }
        if(i==j){
            arr[i] = x;
        }
    
        return quickSort(arr.slice(0,i)).concat([x],quickSort(arr.slice(j+1,arr.length)));
    }

    调用方法

    var arr = [7,4,5,6,9,88,66,3];
    
    console.info(quickSort(arr));

    最后输出

    参见:

    1. http://www.cnblogs.com/foreverking/articles/2234225.html

    2. http://blog.csdn.net/morewindows/article/details/6684558

    3. http://ahalei.blog.51cto.com/4767671/1365285

  • 相关阅读:
    Python爬虫3大解析库使用导航
    pyquery解析库的介绍和使用
    BeautifulSoup解析库的介绍和使用
    Xpath解析库的使用
    python爬虫之正则表达式(用在其他地方也可)
    requests的基本使用
    Linux下防范小型cc攻击
    图片素材资源
    postman安装
    edraw快捷键
  • 原文地址:https://www.cnblogs.com/Iqiaoxun/p/5494647.html
Copyright © 2011-2022 走看看