美文网首页程序员
js之快速排序

js之快速排序

作者: _州舟_ | 来源:发表于2019-01-17 23:37 被阅读0次

上代码:

<script type="text/javascript">

var arr=[12,20,5,16,15,1,30,45,23,9];

console.log(' 初始为: '+ arr);

function quickSort(arr){

            //如果数组<=1,则直接返回

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

            var pivotIndex=Math.floor(arr.length/2);

            //找基准,并把基准从原数组删除

            var pivot=arr.splice(pivotIndex,1)[0];

            //定义左右数组

            var left=[];

            var right=[];

            //比基准小的放在left,比基准大的放在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));

        }

</script>

一开始的初始为[ 12,20,5,16,15,1,30,45,23,9];

这段代码的意思为判断arr 这个数组的长度是否为一个(判断是否为一个数),是则让它返回这个数组;

好了现在来分析代码:

[ 12,20,5,14,15,21,30,45,23,9];这段代码

先除与2取到中间值也就是elements的长度除以2,向下取证取到下标4  也就是15这个数

15作为基准数,比15小的放到15的左边,比15大的放到15的右边

左边:12,5,14,9;

右边:20,21,30,45,23;

之后调用递归函数,再讲left这个比15小的数组分解

第一次循环得到左边 left 的值:{

left 为 12,5,14,9; 用他的长度在除以2,向下取证 取到5  用5做判断 ,小于5的放到left里,大于5 的放到right中   得到

left为空    基准数为5    right为 12,14, 9;

在将right[15,14,9]这个数组的长度在除以2 向下取整,得到14;   再讲比14小的放到left中去,比14大的放到right中   得到

left :9 , 12  基准数为14    right为  空;

left为 9 , 12 ;所以需要在分解,下标为0取值为9  所以left为空,right为12;(因就剩一个值,所以不做过多分解,如还有数,将进行继续分解);

最后循环完成的值就为 5 , 9 , 12,14;

}

第一次循环的到右边right的值{

right为:20,21,30,45,23;  用right的长度除以二,向下取整得到   得到30  所以将比30小的放到左边,比30大的放到右边;

left : 20 ,21 , 23,   基准值 30; right:45;(此处的right因为只剩一个值,所以判断一次就结束得到最大值45,若有多次,还需分解)

left: 20,21,23; 的长度除以2 向下取整得到 下标1   21,所以把比21小的放左边,大的放右边

得到 left :20   基准值  21   right 23;

此处的left和right还需在分解判断一次(但因为就剩一个值,所以此处不做分解)

最后循环出来值为 20 ,21,23,30,45;

}

所以最后的值就为  left :5 , 9 , 12 ,14; 基准值: 15  right: 20 ,21,23,30,45;

最后字符串拼接得 5 , 9 , 12 ,14,15,20 ,21,23,30,45;

相关文章

  • js之快速排序

    上代码: var arr=[12,20,5,16,15,1,30,45,23,9]; console.log(' ...

  • JS之快速排序

    快速排序(Quicksort)是对冒泡排序的一种改进。 基本思路: 1.以一个数为基准(中间的数),比基准小的放到...

  • js 排序算法之快速排序

    快速排序是一种划分交换排序。它采用了一种分治的策略,通常称其为分治法。 分治法的基本思想是:将原问题分解为若干个规...

  • 七大排序算法之快速排序

    七大排序算法之快速排序 @(算法笔记)[排序算法, 快速排序, C++实现] [TOC] 快速排序的介绍: 快速排...

  • 1.2-交换排序-快速排序

    参考链接 交换排序:快速排序(Quick Sort) 白话经典算法系列之六 快速排序 快速搞定 快速排序是C.R....

  • js排序 - 快速排序

    (1)在数据集之中,选择一个元素作为"基准"(pivot)。 (2)所有小于"基准"的元素,都移到"基准"的左边;...

  • js 快速排序

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

  • JS———快速排序

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

  • JS快速排序

    前言 这两天看到阮一峰前辈的快排引起的一系列事件...(居然DDOS都出来了),前端界又被顺路diss了一番,想起...

  • JS快速排序

网友评论

    本文标题:js之快速排序

    本文链接:https://www.haomeiwen.com/subject/tcnwdqtx.html