js 中的快速排序算法简单实现

本文介绍了一种使用JavaScript实现快速排序的方法。通过选取基准值并将其余元素分为左右两部分,递归地完成整个数组的排序过程。文章还分享了实现过程中遇到的问题及解决方案。

  对于快速排序,最早是在c++中看到,它是利用指针来交换顺序,其实无论哪种语言,原理 和 思想都是一样,然而真正用起来的时候就特别容易忽略一些事实,导致实现失败。废话少说,下面用js实现一下快速排序:

  基本算法是 找出一个基准值,小于基准值的放在左边,大于基准值的放在右边。然后重复这个算法,直至数组的长度为小于等于1.

第一遍代码如下:

var quickSort = function (arr){
    if(arr.length <=1) {return arr;}

    var left = [];
    var right = [];
    var standIndex = Math.floor(arr.length/2);
    var standNum = arr[standIndex];
    for(var i=0; i<arr.length; i++){
        if(arr[i] < standNum){
            left.push(arr[i]);
        }else{
            right.push(arr[i]);
       }
    }
    return quickSort(left).concat(quickSort(right));
}

结果呢,可能如你所料,直接崩溃了,郁闷至极啊,找了好久的错误,幡然醒悟,特么的 ,已经被当作基准的值竟然又一次参与排序了,结果就悲剧了。

再次修正代码如下:(认真看改动的地方)

var quickSort = function (arr){
    if(arr.length <=1) {return arr;}

    var left = [];
    var right = [];
    var standIndex = Math.floor(arr.length/2);
    var standNum = arr[standIndex];
    for(var i=0; i<arr.length; i++){
        if(arr[i] < standNum){
            left.push(arr[i]);
        }else if(arr[i] > standNum){
            right.push(arr[i]);
       }
    }
    return quickSort(left).concat([standNum], quickSort(right));
}

 

  

 

转载于:https://www.cnblogs.com/donglegend/p/4718211.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值