js实现快速排序和归并排序

引言

突发奇想使用js来实现这两个经典的排序算法。由于JavaScript高度方便的数据结构,因此相比C版本的代码,此版本更加容易理解!

快速排序


/** 快速排序(函数思想)
 * @param {Object} list 要排序的列表
 * @return {Array} 已经排序的数组
 */
function quikSort(list){
	if(! (list instanceof Array)){
		throw (new Error("错误的列表"));
	}
	
	if(list.length == 0){
		return [];
	}
	
	//对数据进行筛选
	let firstElement = list.splice(0, 1);
	let lessElements = list.filter(e => e <= firstElement[0]); 
	let greatElements = list.filter(e => e > firstElement[0]);
	
	//递归调用
	return quikSort(lessElements)
	       .concat(firstElement)
		   .concat(quikSort(greatElements));
}

归并排序

/** 归并排序
 * @param {Object} list 要排序的列表
 * @return {Array} 已经排序的数组
 */
function mergeSort(list){
	if(!(list instanceof Array)){
		throw (new Error("错误的列表"));
	}
	
	if(list.length <= 1){
		return list;
	}
	
	//对数据进行分割
	let splits = list.splice(Math.floor(list.length / 2), list.length);
	
	//递归调用
	let leftPart = mergeSort(list);
	let rightPart = mergeSort(splits);
	
	// 进行归并
	let result = [];
	while(leftPart.length != 0 && rightPart.length != 0){
		if(leftPart[0] <= rightPart[0]){
			result.push(leftPart.splice(0, 1)[0])
		}else{
			result.push(rightPart.splice(0, 1)[0])
		}
	}
	
	return result.concat(leftPart).concat(rightPart);
}

测试结果

//result = quikSort([9, 8, 7, 6, 6, 5, 5, 4, 3, 3, 2, 1, 9])
//result = mergeSort([9, 8, 7, 6, 6, 5, 5, 4, 3, 3, 2, 1, 9])
//console.log(result)

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值