国产探花免费观看_亚洲丰满少妇自慰呻吟_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;}            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 龙泉市| 甘洛县| 蒲江县| 石城县| 太保市| 阳原县| 岗巴县| 桐梓县| 彭阳县| 石棉县| 柳州市| 浦北县| 鄂温| 连南| 邢台市| 赤峰市| 皋兰县| 资阳市| 高雄县| 阿拉善右旗| 缙云县| 花垣县| 宜宾市| 英吉沙县| 遂川县| 通许县| 舒城县| 高尔夫| 金昌市| 德兴市| 中宁县| 瑞金市| 尼木县| 裕民县| 伊宁县| 南丹县| 电白县| 山丹县| 天津市| 桐梓县| 灵宝市|