js数组中几种常用的排序算法

目录

冒泡排序 

选择排序

插入排序

快速排序

我们首先先随便创建一个数组用于之后的排序验证

var arr = [2, 8, 7, 9, 1, 4];

冒泡排序

将前一个数与后一个数进行比较,值大的往后放,每一轮比较之后最大的数都会排到后面去

var bubbleSort = (arr) => {
				for (var i = 0; i < arr.length - 1; i++) {
					for (var j = 0; j < arr.length - 1; j++) {
						if (arr[j] > arr[j + 1]) {
							var temp = arr[j];
							arr[j] = arr[j + 1];
							arr[j + 1] = temp;
						}
					}
				}
			};

在第一层for循环中打印一下arr,可以发现每次最大的都往后排放了。

选择排序

第一轮比较出最小的那个数,将最小的那位数与第一位数置换;第二轮继续比较出从第二位开始的最小的那个数,将最小的那位数与第二位数置换;依次类推进行排序,将最小位放前面

var selectSort = (arr) => {
				for (var i = 0; i < arr.length - 1; i++) {
					var min = i;
					for (var j = i + 1; j < arr.length; j++) {
						if (arr[min] > arr[j]) {
							min = j;
						}
					}
					if (min !== i) {
						var temp = arr[min];
						arr[min] = arr[i];
						arr[i] = temp;
					}
				}
			};

在第一层for循环中打印一下arr,可以发现每次最小的都往前排放了。

插入排序

先排前两个顺序,在将第三个与排好的两个比较,然后将第三个插入合适的位置,这样前三个的顺序就排好了,依次这样就排好了。

var insertSort = (arr) => {
				for (var i = 1; i < arr.length; i++) {
					for (var j = i; j > 0; j--) {
						if (arr[j] < arr[j - 1]) {
							var temp = arr[j];
							arr[j] = arr[j - 1];
							arr[j - 1] = temp;
						} else break;
					}
				}
			};

在第一层for循环中打印一下arr,可以发现每次插入后前面的顺序都已经排好,只需要后续继续插入到已经排好中合适的位置即可。

快速排序

将数组的第一个元素选作中心元素,遍历数组第一位之后的数,比中心元素小的放入左数组中,比中心元素大的放入右数组中,在采用递归的方式又分别将左右数组同样操作,返回连接的左右数组。

var fastSort = (arr) => {
				if (arr.length <= 1) {
					return arr;
				}
				var left = [];
				var right = [];
				var pivot = arr[0];
				for (var i = 1; i < arr.length; i++) {
					if (arr[i] < pivot) {
						left.push(arr[i]);
					} else {
						right.push(arr[i]);
					}
				}
				return fastSort(left).concat([pivot], fastSort(right));
			};

下图为每次递归的中心元素位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值