js编写快速排序

本文介绍了一种使用JavaScript实现的快速排序算法。通过选取基准值,将数组分为左右两个子集,然后递归地对这两个子集进行排序。文章还提供了一个具体的排序示例和源代码。

之前一直学的c语言版的数据结构,所以想尝试一下js版的快速排序,发现更有趣。

其实原理都是大同小异的,下面就来介绍一下原理。

1、首先选一个“基准”,一般选中间值比较合适,因为选两头数据都有可能出现最坏的情况。

2、将数组中的数据与“基准”比较,小于“基准”则存放在另一个数组left(左子集)中,大于“基准”则存放在数组right(右子集)中。

3、利用递归函数,将left和right分别重复1和2,每个数组剩下一个元素为止。

 

举个栗子:

12 93 60 9 34 46 78 2 30

12 9 2 30 34 93 60 46 78

2 12 9 30 34 46 93 60 78

2 9 12 30 34 46 60 93 78

2 9 12 30 34 46 60 78 93

下面是代码:

<!DOCTYPE html>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html;charset=utf-8">

<script>

 

function quicksort(arr){

if(arr.length<=1)//判断数组长度,如果小于等于1直接返回输出

return arr;

var pviotIndex=Math.floor(arr.length/2);//取中间元素下标

var pviot=arr.splice(pviotIndex,1)[0];//返回中间元素,并删除原数组中间元素

var left=[];

var right=[];

for(var i=0;i<arr.length;i++){

if(arr[i]<pviot){

left.push(arr[i]);//在left末尾追加小于基准的元素

}else{

right.push(arr[i]);

}

}

return quicksort(left).concat([pviotIndex],quicksort(right));//递归检索比较,并且用concat把左子集、基准和右子集连接起来。

}

 

</script>

</head>

<body>

</body>

</html>

 

转载于:https://www.cnblogs.com/wuxn/p/4895356.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值