js递归思想做的数组快速排序法:QuickSort()函数方法

时间: 作者:admin 浏览:

这个是用递归思想做的一个数组排序,比较适合高配置硬件,因为比较耗内存,优点是速度极快,适合大数据运算;

/**
*@params{
*    arr {array} 是将要排序的数组
*    leftIndex {number} 要排序数组第一个下标,一般都是0;
*    rightIndex {number} 要排序数组的最后一个下标,一般都是arr.length-1,也可以是小于数组总长度的数字,这样将只进行这一部分数的排序
*    sort {boolean} 决定数组是按逆序还是顺序排序,默认是true顺序,false逆序
}
*@example{
*    var arr = [1, -1, 20, 0, 0, -2, 20, -3, -90, 10, 54, 0, 1, 2, 3, 5, -1, 10];
*    QuickSort(arr, 0, arr.length-1);
*    console.log(arr);//[-90, -3, -2, -1, -1, 0, 0, 0, 1, 1, 2, 3, 5, 10, 10, 20, 20, 54]
*}
*/

function QuickSort(arr, leftIndex, rightIndex, sort){//从小到大排序
    if(!(arr instanceof Array)){
        console.log("arr不是一个数组!");
        return;
    }
    if((typeof leftIndex!='number')||(typeof rightIndex!='number')){
        console.log("leftIndex或rightIndex不是一个数字!")
        return;
    }
    var l=leftIndex;
    var r=rightIndex;
    var pivot=arr[parseInt((leftIndex+rightIndex)/2)];//找中间值
    var temp=0;
    var flag=true;
    while(l < r){
        if( sort == undefined ||sort == true ){//顺序
            while(arr[l] < pivot) l++;
            while(arr[r] > pivot) r--;//走位
        }else if( sort != undefined && sort==false ){//逆序
            while(arr[l] > pivot) l++;
            while(arr[r] < pivot) r--;//走位
        }else{
            flag=false;
            console.log("sort值非法,数组未排序!");
            break;
        }
        if(l >= r) break;
        temp=arr[l];
        arr[l]=arr[r];
        arr[r]=temp;
        if(arr[l] == pivot) --r;
        if(arr[r] == pivot) ++l;//交换完l和r分别走过中间线
    }
    if(flag){
        if(l == r){
            l++;
            r--;
        }
        if(leftIndex < r) QuickSort(arr,leftIndex,r,sort);
        if(rightIndex > l) QuickSort(arr,l,rightIndex,sort);
    }
}
微信公众号
微信公众号:
  • 前端全栈之路(微信群)
前端QQ交流群
前端QQ交流群:
  • 794324979
  • 734802480(已满)

更多文章

栏目文章


Copyright © 2014-2023 seozhijia.net 版权所有-粤ICP备13087626号-4