首页 > 语言 > JavaScript > 正文

JavaScript实现的九种排序算法

2024-05-06 15:41:56
字体:
来源:转载
供稿:网友

前言

排序是数据结构主要内容,并不限于语言主要在于思想;大学曾经用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;}            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选