几种简单的排序算法

1.向上冒泡排序

var len = arr.length;
for (var i = 0; i < len - 1; i++) { //比较趟数;
  for (var j = len - 1; j > i; j--) { //比较次数
	if (arr[j] > arr[j - 1]) {    //降序
	  [arr[j], arr[j - 1]] = [arr[j - 1], arr[j]];
	}
  }
}

2.选择排序

未排序部分是整个数组, 已排序部分是空的 找最值(最大或最小)

var len = arr.length;
for(let i = 0; i < len - 1; i++) {
  let minIndex = i;
    for (let j = i + 1; j < len; j++) {
	  if (arr[j] < arr[minIndex]) {
		minIndex = j; //先和一个基值比较,找到最大或最小值后存其索引;
	  }
	}
  [arr[i], arr[minIndex]] = [arr[minIndex], arr[i]]
}

3.插入排序

已排序部分:视为有一个初始值,
未排序部分:依次从里面取值到已排序部分,进行从后向前的比较,如果已排序部分大于待排序部分
继续向前,值到已排序部分有第一个比他小的数,就把待排序数插入到这个值后面。

for (var i = 1; i < len; i++) { //循环待排序部分
	var c = arr[i]; //存待排序值 
	// 	for (var j = i - 1; j >= 0; j--) {//与已排序部分进行比较
	// 		if (arr[j] > c) {
	// 			arr[j + 1] = arr[j];
	// 	} else {
	// 		break;
	// 	  }
	// 	}
	// 	console.log(j)
	// 	arr[j + 1] = c;
	var j = i - 1;
	while (j >= 0 && arr[j] < c) {
		arr[j + 1] = arr[j]
		j--;
	}
	arr[j + 1] = c;
}
console.log(arr);

4.快速排序

function quickSort(arr) {
	//如果数组<=1,则直接返回
	if (arr.length <= 1) {
		return arr;
	}
	var pivotIndex = Math.floor(arr.length / 2);
	//找基准,并把基准从原数组删除
	var pivot = arr.splice(pivotIndex, 1)[0];
	//定义左右数组
	var left = [];
	var right = [];

	//比基准小的放在left,比基准大的放在right
	for (var i = 0; i < arr.length; i++) {
		if (arr[i] <= pivot) {
			left.push(arr[i]);
		} else {
			right.push(arr[i]);
		}
	}
	//递归
	return quickSort(left).concat([pivot], quickSort(right));
}
quickSort(arr);
console.log(arr);

5.随机排序

arr.sort(() => Math.random() - 0.5)

6.利用洗牌算法写随机排序

var arr = [10, 2, 8, 36, 17, 11, 9];
var len = arr.length;
var random = ([x, y], z) => {
	let data = Math.floor(Math.random() * (y - x) + x);
	return data === z ? random([x, y], z) : data;
}
let leng = len - 1;
for (let i = 0; i < len * 2; i++) {
	let _i = i % len;
	//正向排序
	let r = random([0, leng], _i);
	[arr[_i], arr[r]] = [arr[r], arr[_i]];
	//反向排序
	r = random([0, leng], _i);
	[arr[leng - _i], arr[r]] = [arr[r], arr[leng - _i]]
}
console.log(arr)

猜你喜欢

转载自blog.csdn.net/qq_42164670/article/details/83176584
今日推荐