JS 排序算法 (javascript ) 冒泡排序 比较 快速排序

1.冒泡排序 

1.1 解析

let arr = [2,3,4,2,1]

对比相邻的两个值  j 大于 j+1 则两个值交换位置

1.2 测试效率 bubbleSort(arr)

0. 测试数据 arr.length < 3W   花费时间 0s - 1s

1. 测试数据 arr.length == 5W   花费时间 3s - 4s

2. 测试数据 arr.length == 10W   花费时间 14s - 15s

3. 测试数据 arr.length ==  20W  花费时间  55s

// 冒泡排序
function bubbleSort(arr) {
	let len = arr.length
	for (var i = 0; i < len - 1; i++) {
        let sonLen = len - 1 - i
		for (var j = 0; j < sonLen; j++) {
			if (arr[j] > arr[j+1]) {        // 相邻元素两两对比
			   [arr[j], arr[j+1]] = [arr[j], arr[j+1]]        // 元素交换
			}
		}
	}
	return arr
}

2.快速排序

2.1 解析

let arr = [2,3,4,2,1]

1.设置基础值为数组第一个key  左边 i(form)  右边 j (to) (i, j  各管一边  不得越界)

2.首先 j 往左边走( j --) 跟 key 对比  小于key 时 停下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是快速排序算法冒泡排序算法JS实现和注释: 快速排序算法: ```javascript function quickSort(arr) { // 如果数组长度小于等于1,则返回原数组 if (arr.length <= 1) { return arr; } // 选择基准点,可以选第一个元素、最后一个元素或者中间元素 const pivotIndex = Math.floor(arr.length / 2); const pivot = arr[pivotIndex]; // 分别存放比基准点小、大和等于基准点的元素 const less = []; const greater = []; const equal = []; for (let i = 0; i < arr.length; i++) { if (arr[i] < pivot) { less.push(arr[i]); } else if (arr[i] > pivot) { greater.push(arr[i]); } else { equal.push(arr[i]); } } // 递归处理比基准点小和大的数组,再将三个数组拼接起来 return quickSort(less).concat(equal, quickSort(greater)); } ``` 注释: 1. `quickSort` 函数接受一个数组作为参数,返回排序后的数组。 2. 如果数组长度小于等于1,则返回原数组,因为只有一个元素或者没有元素的数组已经是有序的了。 3. 选择基准点,这里选取的是中间元素。 4. 分别存放比基准点小、大和等于基准点的元素。 5. 递归处理比基准点小和大的数组,再将三个数组拼接起来。 冒泡排序算法: ```javascript function bubbleSort(arr) { // 外层循环控制排序的趟数 for (let i = 0; i < arr.length - 1; i++) { // 内层循环控制每趟排序的次数 for (let j = 0; j < arr.length - 1 - i; j++) { // 如果前一个元素比后一个元素大,则交换它们的位置 if (arr[j] > arr[j + 1]) { const temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } return arr; } ``` 注释: 1. `bubbleSort` 函数接受一个数组作为参数,返回排序后的数组。 2. 外层循环控制排序的趟数,由于每趟排序都会把最大的元素“冒泡”到最后,所以最后一个元素不需要再参与比较。 3. 内层循环控制每趟排序的次数,由于已经有 `i` 个元素排好序了,所以内层循环只需要比较前 `arr.length - 1 - i` 个元素。 4. 如果前一个元素比后一个元素大,则交换它们的位置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值