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 时 停下来 (限制 j 不小于 i  不得越界)

3.再者 i往右边走 ( i ++)跟key 对比  大于key 时 停下来 (限制 i 不大于 j  不得越界)

4.都停下时 两者进行交换 [arr[j], arr[i]] = [arr[i], arr[j]]

5.基础值 与 当前 i值 进行交换 (设置后续循环 初始值)

6.从form 往右边走 到 i-1 左边继续 循环  speedinessSort(arr, form, i-1) (左边区域进行再排序)

7.从i+1 往右边走 到 to 右边继续 循环 speedinessSort(arr, i+1, to) (右边区域再排序)

2.2 测试效率 speedinessSort(arr, 0, arr.length-1)

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

1. 测试数据 arr.length == 1000W   花费时间 1s - 2s

2. 测试数据 arr.length == 2000W   花费时间 4s

3. 测试数据 arr.length ==  3000W  花费时间  6s

// 快速排序
function speedinessSort (arr, form, to) {
	let i = form, j = to, key = arr[form]//基础值
	if (form >= to) {
	    return
	}
	while(i < j) {
		// j右边向左边走 对比基数 j 小于基础值  停止
		while(arr[j] > key && i<j) {
			j --
		}
		// i左边向右边走 对比基数 i 大于基础值  停止
		while(arr[i] <= key && i<j) {
			i ++
		}
		// i 跟 j 进行交换
		[arr[j], arr[i]] = [arr[i], arr[j]]
	}
	// 基础值 跟 i 交换
	arr[form] = arr[i]
	arr[i] = key
	// 从form 往右边走 到 i-1 左边继续 循环
	speedinessSort(arr, form, i-1)
	// 从i+1 往右边走 到 to 右边继续 循环
	speedinessSort(arr, i+1, to)
	// i 已经替换 不包括i本身
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值