JS中的快速排序和选择排序

选择排序

原理:(以降序为例)遍历乱序的数组,取出数组中最大的值,插入到一个新的数组中,直到原数组的没有值为止

原理图

在这里插入图片描述
JS 代码

var Arr = [5,7,1,8,10,4,3,2]; // 需要排序的数组
var newArr = []; // 已经排好序的数组
function f(arr){
	if(arr.length === 0) return newArr;
	let Max = Math.max(...arr);
	newArr.push(Max);
	for(var i = 0;i<arr.length;i++){
		if(arr[i] === Max){
			arr.splice(i,1)
		}
	};
	f(arr);
};

f(Arr);
console.log(newArr); // [10, 8, 7, 5, 4, 3, 2, 1]

快速排序

原理:(以降序为例)选取乱序数组中中间的值,遍历数组,将数组中每一个值与选取的中间值比较,比选取的值大则放到左边数组,比选取的值小则放到右边数组。用同样的比较方式对左边和右边数组进行排序

原理图

在这里插入图片描述
JS 代码

var Arr = [8,5,3,6,1,2,10];

function f(arr){
	if(arr.length === 0) return arr;
	let Index = Math.floor(arr.length/2); // 获取数组中间的值的index;
	let middleV = arr.splice(Index,1)[0]; // 获取数组中间的值并从arr中取出;
	var left = [],right = [];
	for(var i = 0; i < arr.length; i++){
		if(arr[i]>middleV) left.push(arr[i]);
		else right.push(arr[i]);
	};
	return f(left).concat([middleV],f(right));//把左边和右边的数组用同样的方式排序
};

f(Arr)

猜你喜欢

转载自blog.csdn.net/weixin_44257930/article/details/109027216