码迷,mamicode.com
首页 > 编程语言 > 详细

快速排序

时间:2016-07-23 00:37:00      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:

说话,“快速排序”这个东东是公司JS面试题中出镜率最高的题目之一
其实,用sort()方法就好,可为什么还要问其他的方法呢?
也只能说明:公司想考验人,实在是找不到合适的方法了~~

快速排序的原理:找基准点、建立二个数组分别存储、递归

1.找一个基准点(找一组数的中心位置
2.建立两个数组,分别存储左边和右边的数组
3.利用递归进行下次比较,这个下次比较就是分别在左边和右边的数组里再找一个基准点


编写quickSort()方法
所用到的方法:
Math.floor()
splice()
push()
concat()

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>快速排序</title>
<script>
//sort

//快速排序

//1.找一个基准点
//2.建立两个数组,分别存储左边和右边的数组
//3.利用递归进行下次比较

function quickSort(arr){
    if (arr.length<=1){
        return arr;
    }
    //找数组中间的数作为基准点
    var num=Math.floor(arr.length/2);
    var numValue=arr.splice(num,1);//截取长度为1的数字,其实就是找到基准点
    var left=[];
    var right=[];
    for(var i=0;i<arr.length;i++){
        if(arr[i]<numValue){
            left.push(arr[i]);//小于基准点的放左边的数组中
        }else{
            right.push(arr[i]);//大于基准点的放右边的数组中
        }
    }
    return quickSort(left).concat([numValue],quickSort(right));//进行递归,并将数组连接起来

}

alert(quickSort([12,5,37,6,22,40]));
</script>
</head>

<body>
</body>
</html>

 

快速排序

标签:

原文地址:http://www.cnblogs.com/GumpYan/p/5697552.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!