国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > 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;}            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 清水县| 嘉荫县| 丹阳市| 宁陵县| 安平县| 冷水江市| 青河县| 潼关县| 盖州市| 筠连县| 太湖县| 临夏市| 连云港市| 浦县| 子洲县| 左权县| 石门县| 江川县| 云安县| 衢州市| 大足县| 静宁县| 库尔勒市| 东平县| 廉江市| 桂阳县| 蓬安县| 衡东县| 枣庄市| 宜兴市| 吴堡县| 休宁县| 张北县| 慈溪市| 牟定县| 洪雅县| 廉江市| 门源| 托里县| 东乡县| 庆云县|