前言
排序是数据结构主要内容,并不限于语言主要在于思想;大学曾经用C语言研究过一段时间的排序实现, 这段时间有空用JS再将排序知识点熟悉一遍。
下面话不多说了,来一起看看详细的介绍吧
一、代码汇总(一)
1、冒泡排序
2、改进版冒泡排序
3、选择排序
4、直接插入排序
5、二分插入排序
/* * @Author: laifeipeng * @Date: 2019-02-20 10:00:36 * @Last Modified by: laifeipeng * @Last Modified time: 2019-02-21 11:57:58 *//********* 1、冒泡排序 **********/// 很常见很容易理解的排序算法, 排序思路:遍历数组,每次遍历就将最大(或最小)值推至最前。越往后遍历查询次数越少const bubbleSort = arr => { const list = arr.slice(); //保证函数为纯函数 const len = list.length; for (let i = 0; i < len; i++) { for (let j = len - 1; j > i; j--) { if (list[j] < list[j - 1]) { [list[j - 1], list[j]] = [list[j], list[j - 1]]; } } } return list;}/********* 2、改进版冒泡排序 **********/// 对上述冒泡排序的一种优化, 优化思路:当一次遍历前后数组不产生变化时,说明该数组已经有序,结束排序。const bubbleSort2 = arr => { const list = arr.slice(); //保证函数为纯函数 const len = list.length; for (let i = 0; i < len; i++) { let exchange = false; for (let j = len - 1; j > i; j--) { if (list[j] < list[j - 1]) { [list[j - 1], list[j]] = [list[j], list[j - 1]]; exchange = true; } } if (!exchange) return list } return list;}/********* 3、选择排序 **********/// 在无序区中选出最小的元素,然后将它和无序区的第一个元素交换位置。const selectionSort = arr => { const list = arr.slice(); //保证函数为纯函数 const len = list.length; for (let i = 0; i < len; i++) { let k = i for (let j = len - 1; j > i; j--) { if (list[j] < list[k]) k = j; } if (k !== i) { [list[k], list[i]] = [list[i], list[k]]; } } return list;}/********* 4、直接插入排序 **********/// 每次选择无序区第一个元素插入到有序区,并排序const insertSort = arr => { const list = arr.slice(); //保证函数为纯函数 const len = list.length; for (let i = 1; i < len; i++) { const tmp = list[i]; let j = i - 1; while (j >= 0 && tmp < list[j]) { list[j + 1] = list[j]; j--; } list[j + 1] = tmp; } return list;}/********* 5、二分插入排序 **********/// 插入排序的一种优化实现, 通过二分法减少遍历时间(以前是从某边开始依次比较,现在从中间开始比较,减少比较次数)// 注意,数组很大才能提现二分插入的优势const insertSort2 = arr => { const list = arr.slice(); //保证函数为纯函数 const len = list.length; for (let i = 1; i < len; i++) { const tmp = list[i]; let low = 0; let high = i - 1; let j = i - 1; while (low <= high) { const mid = ~~((low + high) / 2); if (tmp < list[mid]) { high = mid - 1; } else { low = mid + 1; } } while (j > high) { list[j + 1] = list[j]; j--; } list[j + 1] = tmp; } return list;}
新闻热点
疑难解答
图片精选