前端常用排序算法

本文详细介绍了JavaScript中的几种排序算法,包括内置的`sort`方法、冒泡排序、选择排序、快速排序和插入排序。通过示例代码展示了每种排序算法的工作原理及其在不同场景下的应用。理解这些排序算法对于优化代码性能和解决实际问题至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、sort排序

js内置方法,使用如果数组成员不是数字类型,也可以返回一个回调,用于自定义条件判断排序。

let list = [2,34,1,567,34,33,21,2,0,342,1,111,78];
let resList = list.sort(function(a,b) {
	return a-b;
});
console.log(resList); //[0, 1, 1, 2, 2, 21, 33, 34, 34, 78, 111, 342, 567]

2、冒泡排序

嵌套循环,比较相邻两个元素的大小,如果符合条件则交换

let list = [2,34,1,567,34,33,21,2,0,342,1,111,78]
			for (let i = 0; i < list.length; i++) {
				for (let j = 0; j < list.length; j++) {
					if (list[i] > list[j]) {
						let a = list[i];
						list[i] = list[j];
						list[j] = a;
					}
				}
			}
			console.log(list)

3、选择排序

选出最小的放第一个位置,次小的放第二个位置,次次小的放第三个位置,以此类推

function selectSort(list) {
				let li = [],resolveList = [].concat(list);
				for (let i = 0; i < list.length; i++) {
					//获取最小数,b用来记录index,最后splice掉
					let a = resolveList[0],b;
					for (let j = 0; j < resolveList.length; j++) {
						if (a >= resolveList[j]) {
							a = resolveList[j];
							b = j
						}
					}
					resolveList.splice(b, 1)
					li[i] = a;
				}
				return li;
			}
			selectSort([2,34,1,567,34,33,21,2,0,342,1,111,78])

4、快速排序

获取数组的中间位置,然后比中间位置小的放左边,大的放右边。然后将左右两侧的数组递归选择排序,最后合并到一起。

function quickSort(list) {
				//console.log(list)
				if (list.length === 1 || (list.length === 2 && list[0] === list[1])) {
					return list;
				}
				let middleIndex = Math.floor(list.length / 2),middleVal = list[middleIndex], listLeft = [],listRight = [];
				
				for (let j = 0; j < list.length; j++) {
					if (j !== middleIndex) {
						if (middleVal >= list[j]) {
							listLeft.push(list[j])
						} else {
							listRight.push(list[j])
						}
					}
				} 
				listLeft.push(middleVal)
				return quickSort(listLeft).concat(quickSort(listRight))
			}
			quickSort([2,34,1,567,34,33,21,2,0,342,1,111,78])

5、插入排序

从第二个位置开始比较,依次和前面的成员进行比较,如果小(或者大)则交换位置。如果不小(或者大)则可以跳出循环,因为是从第二个开始比较的,前面的都是有序的。例如[5,6,8,20,15],15和20比小,需要往前移,15和8比不需要往前移,则15和剩下的5、6也就不需要再比较了,因为前面已经比较过了,已经是有序的了。

let arr = [2,34,1,567,34,33,21,2,0,342,1,111,78];
			 for (let i = 1; i < arr.length; i++) {
			            let j = i;
			            while (j > 0){
			                if (arr[j] < arr[j-1]){
			                    let temp ;
			                    temp = arr[j];
			                    arr[j] = arr[j-1];
			                    arr[j-1] = temp;
			                    j--;
			                } else {
			                    break;
			                }
			            }
			        }
			console.log(arr)			
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值