前言
排序是數據結構主要內容,并不限于語言主要在于思想;大學曾經用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;}
新聞熱點
疑難解答
圖片精選