快速排序的两种实现方法(js)

2021-07-04 14:06

阅读:678

标签:push   交换   cti   ret   star   取出   else   spl   while   

快速排序的基本思想:通过一趟排序,将待排记录分割成独立的两部分,其中一部分记录的关键字均比另外一部分记录的关键字小,则可分别对着两部分记录继续进行排序,以达到整个序列有序的目的。--------------冒泡的升级版。

分为两种方法:(1)使用两个数组进行存放。(2)使用交换(正宗版本

(1)

    function quickSort(arr){
        if(arr.length){
            return arr;
        }
        var pivotIndex=Math.floor(arr.length/2);//找到那个基准数
        var pivot=arr.splice(pivotIndex,1)[0]; //取出基准数,splice返回值为数组。
        var left=[]; 
        var right=[];
        for(var i=0;i){
            if(arr[i]pivot){
                left.push(arr[i]);
            }else{
                right.push(arr[i]);
            }
        }
        return quickSort(left).concat([pivot],quickSort(right)); 
    }
    arr=[2,1,5,8,3,7,4,6,9];
    console.log(quickSort(arr)); //[1, 2, 3, 4, 5, 6, 7, 8, 9]

(2)

 

        var arr=[12,20,5,16,15,1,30,45,23,9];
    var start = 0;
    var end = arr.length;
    console.log(‘arr:‘ +arr);
    function quickSort(arr,low,high){
        var key=arr[low];
        var start=low;
        var end=high;
        while(end>start){
            while(end>start&&arr[end]>=key) end--;
            if(arr[end]key){
                var temp = arr[end];
                arr[end]=arr[start];
                arr[start] = temp;
            }
            while(end>start&&arr[start];
            if(arr[start]>=key){
                var temp = arr[start];
                arr[start]=arr[end];
                arr[end]=temp;
            }
        }
        if(start>low) quickSort(arr,low,start-1);
        if(end,high);
    }

    quickSort(arr,start,end);
    console.log(‘After arr:‘ +arr);  //[1,5,9,12,,15,16,20,23,30,45]

第一种快速排序方法为改良后的版本,第二个快速排序方法为正宗的通过冒泡排序衍生的快速排序方法。 

 

快速排序的两种实现方法(js)

标签:push   交换   cti   ret   star   取出   else   spl   while   

原文地址:https://www.cnblogs.com/alaner/p/9612948.html


评论


亲,登录后才可以留言!