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


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

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

    (1)

        function quickSort(arr){
            if(arr.length<1){
                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<arr.length;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)

    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]<=key) 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,end+1,high);
        }
        var arr=[12,20,5,16,15,1,30,45,23,9];
        var start = 0;
        var end = arr.length-1;

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

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

  • 相关阅读:
    设计模式学习笔记-观察者模式(转)
    VC++ 遍历文件夹
    VC++文件监控 ReadDirectoryChangesW
    Windows Socket五种I/O模型——代码全攻略(转)
    CentOS 6 安装RabbitMQ
    nginx tomcat负载配置
    Centos6 Nginx安装
    windows 安装MongoDB服务
    跟导师请教后写出的关于C#导出Excel,不导出隐藏列的方法
    linux 常用命令(四)——(centos7-centos6.8)Vim安装
  • 原文地址:https://www.cnblogs.com/alaner/p/9612948.html
Copyright © 2020-2023  润新知