js实现数字排序方法

对于排序算法肯定不陌生吧,让我们来见识见识

常用算法有哪些呢?

冒泡排序

1.冒泡排序

这因该算我们熟悉的第一个排序方法吧,就是每次比较两个数字,通过判断进行前后交换,知道数组中没有可以交换的数,算法结束

function maopao(arr) { // 英语不好
	var len = arr.length;
	for (var i = 0; i < len-1; i++) {
		for (var j = i+1; j < len; j++) { // 确保 j 比 i 大 1
			if (arr[i] > arr[j]) { 
				var temp = arr[i];
				arr[i] = arr[j];
 				arr[j] = temp;
			}
		}
	}
	return arr;  // 返回新的数组
}
var arr = [ 1,78,3,67,98,25,108,78,26]
maopao(arr)  // 执行方法
console.log(arr) // [1, 3, 25, 26, 67, 78, 78, 98, 108]

2.选择排序

选择排序也比较容易理解,先从一个数组中找到最小(大)的,然后把这个数提取第一个位置,再从剩余里面继续找最小(大)的,完成排序

function select(arr) {
	var len = arr.length;
	var temp;
	var min; // 先默认第一个最小
	for(let i = 0;i < len-1; i++) {
		min = i
		for(let j = i+1; j < len; j++) {
			if(arr[j] < arr[i]) {
				min = j
			}
		}
		temp = arr[i];
		arr[i] = arr[min];
		arr[min] = temp;
	}
   return arr
}
var arr = [78,65,45,67,12,98]
select(arr)
 console.log(arr) // [12, 45, 65, 67, 78, 98]

3.插入排序

// 类似于斗地主,对自己的牌排序
function insert(array) {
	for (var i = 1; i < array.length; i++) {
 		var key = array[i]; // 抽出来的牌
		var j = i - 1;
		while (j >= 0 && array[j] > key) { // 抽出来牌的和前一个比较
			array[j + 1] = array[j]; 
			j--;
		}
		array[j + 1] = key;
	}
return arr
}
var arr = [78, 65, 45, 67, 12, 98,5]
insert(arr)
console.log(arr) // [5, 12, 45, 65, 67, 78, 98]

4.sort

sort 依据返回值

function SortArr(arr) {
	arr.sort((a,b) => {
 		return a-b
	})
return arr
}
var arr = [78, 65, 45, 67, 12, 98,5]
SortArr(arr)
console.log(arr) // [5, 12, 45, 65, 67, 78, 98]

5. 快速排序 (递归的典型)

这个方法是我从阮一峰那里学的,
想法就是先选中中间数作为参考值,小于中间值的放在左边,大于中间值的放在右边,然后进行递归,使得左边右边重复这个操作,直到左右两边数组长度只有一个的时候

var quickSort = function(arr) {
	if (arr.length <= 1) {
		return arr;
	}
	var index = Math.floor(arr.length / 2);
	var middle = arr.splice(index, 1)[0];
	var left = [];
	var right = [];
	for (var i = 0; i < arr.length; i++) {
		if (arr[i] < middle) {
			left.push(arr[i]);
		} else {
 			right.push(arr[i]);
		}
	}
	return quickSort(left).concat([middle], quickSort(right)); // 递归
};
var arr = [85, 24, 63, 45, 17, 31, 96, 50];
quickSort(arr);
console.log(quickSort(arr)); // [24, 31, 45, 50, 63, 85, 96]

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
目前理解的就这几种,其他方法暂未理解,持续更新ing

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值