zoukankan      html  css  js  c++  java
  • JS排序算法总结:(五)快速排序

    目的:掌握 快速排序 的 基本思想与过程、代码实现、时间复杂度

    1、基本思想与过程:(分治思想,挖坑填数)

      (1)从数列中选择一个数作为key值;

      (2)将比这个数小的数全部放在它的左边,大于或等于它的数全部放在它的右边;

      (3)对左右两个小数列重复第二步,直至各区间只有1个数。

      下面对数组【42,20,17,13,28,14,23,15】进行快速排序,模拟两轮排序的结果如下:

    2、代码实现:

    function quickSort(a,l,r){
        
        if(l>=r)
            return;
    
        var i = l; 
        var j = r; 
        var key = a[l];//选择第一个数为key
    
        console.log('quickSort(a,'+l+','+r+')')
        while(i<j){
    
            while(i<j && a[j]>=key){//从右向左找第一个小于key的值
                j--;
            }
            if(i<j){
                a[i] = a[j];
                i++;
            }
    
            while(i<j && a[i]<key){//从左向右找第一个大于key的值
                i++;
            }
            if(i<j){
                a[j] = a[i];
                j--;
            }
        }
        //i == j
        a[i] = key;
        quickSort(a, l, i-1);//递归调用
        quickSort(a, i+1, r);//递归调用
        return a;
     }

     3、时间复杂度:O(N*logN)

  • 相关阅读:
    sql注入的防护
    mysql及sql注入
    机器学习之新闻文本分类。
    python导入各种包的方法——2
    爬去搜狐新闻历史类
    前端展示
    热词分析前端设计
    爬虫经验总结二
    爬虫经验总结一
    SpringBoot配置Druid数据库连接池
  • 原文地址:https://www.cnblogs.com/CassieHouse/p/9560115.html
Copyright © 2011-2022 走看看