码迷,mamicode.com
首页 > 编程语言 > 详细

八大排序算法总结:(五)快速排序

时间:2018-08-30 14:58:46      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:数组   fun   span   ret   个数   http   turn   color   数列   

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

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)

八大排序算法总结:(五)快速排序

标签:数组   fun   span   ret   个数   http   turn   color   数列   

原文地址:https://www.cnblogs.com/CassieHouse/p/9560115.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!