摘要:基本排序算法總結前言隨著的興起將推向的一個前所未有的高度作為為建立高性能的服務端而創建的運行平臺隨著時間的推移和生態鏈的完善已經不再局部于服務端包括前端后端桌面這篇文章介紹的傳統的散打排序方法并用實現其功能如有需要可以對其封裝在隨后會介紹高
基本排序算法總結 前言
隨著node的興起, 將javascript推向的一個前所未有的高度, node作為為建立高性能的服務端而創建的js運行平臺隨著時間的推移和生態鏈的完善已經不再局部于服務端,包括前端,后端,桌面,這篇文章介紹的傳統的散打排序方法,并用javascript實現其功能,如有需要可以對其封裝,在隨后會介紹高級排序算法---(希爾排序,歸并排序,快速排序),下面給出鏈接高級排序算法 https://segmentfault.com
冒泡排序
冒泡排序是最常見的一種排序方法,他采用類似于逐輪沉淀的方法每次找到隊列中的最大值并放置與最后, 在每輪中使前一個元素與后一個元素比較,如果前者與后者就交換次序,如下圖所示.
function bubbleSort(array) { for (let i = 0; i < array.length-1; i++) { for (let j = 0; j < array.length-1-i ; j++) { if (array[j] > array[j+1]) { //1. es6 [array[j+1], array[j]] = [array[j], array[j+1]]; } } } return array; }
1 可以采用es6最新的解構語法交換數據 [array[j+1], array[j]] = [array[j], array[j+1]]; 2 為引入變量的交換 array[j] = array[j] + array[j+1]; array[j+1] = array[j] - array[j+1]; array[j] = array[j] - array[j+1];
選擇排序
function selectionSort(array) { for (let i = 0; i < array.length - 1; i++) { for (let j = i+1; j < array.length; j++) { if (array[i] > array[j]) { // es6 [array[j], array[i]] = [array[i], array[j]]; } } } return array }
插入排序
function insertionSort(array) { for (let i = 1; i < array.length; i++) { let temp = array[i]; let j = 0; for (j = i - 1; (j >= 0) && (temp < array[j]); j--) { array[j + 1] = array[j]; } array[j + 1] = temp; console.log(array); } return array; }實驗對比
創建隨機生成數組:
let CArray = (function(params) { function CArray(numElements) { this.dataStore = []; this.pos = 0; this.numElements = numElements; this.insert = insert; this.toString = toString; this.clear = clear; this.setData = setData; this.swap = swap; for (var i = 0; i < numElements; ++i) { this.dataStore[i] = i; } } function setData() { for (var i = 0; i < this.numElements; ++i) { this.dataStore[i] = Math.floor(Math.random() * (this.numElements+1)); } } function clear() { for (var i = 0; i < this.dataStore.length; ++i) { this.dataStore[i] = 0; } } function insert(element) { this.dataStore[this.pos++] = element; } function toString() { var retstr = ""; for (var i = 0; i < this.dataStore.length; ++i) { retstr += this.dataStore[i] + " "; if (i > 0 && i % 10 == 0) { retstr += " "; } } return retstr; } function swap(arr, index1, index2) { var temp = arr[index1]; arr[index1] = arr[index2]; arr[index2] = temp; } return CArray; })()
結論:
var numElements = 10000; var myNums = new CArray(numElements); myNums.setData(); var start = new Date().getTime(); bubbleSort(myNums.dataStore).toString() var stop = new Date().getTime(); var between = stop - start; console.log("冒泡排序執行時間:" + between); start = new Date().getTime(); selectionSort(myNums.dataStore).toString() stop = new Date().getTime(); between = stop - start; console.log("選擇排序執行時間:" + between); start = new Date().getTime(); insertionSort(myNums.dataStore).toString() stop = new Date().getTime(); between = stop - start; console.log("插入排序執行時間:" + between); console.log(new Date().getTime());
可知對于執行效率: 選擇排序 > 插入排序要 > 冒泡
排序快,插入排序是這三種算法中最快的
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/107115.html
摘要:強烈推薦上值得前端學習的數據結構與算法項目,包含圖的演示過程與視頻講解。該倉庫包含了多種基于的算法與數據結構,提供進一步閱讀的解釋和鏈接。數據結構和算法必知必會的個代碼實現。 showImg(https://segmentfault.com/img/bVbvpYZ); 前言 算法為王。想學好前端,先練好內功,內功不行,就算招式練的再花哨,終究成不了高手;只有內功深厚者,前端之路才會走得...
摘要:今天同學去面試,做了兩道面試題全部做錯了,發過來給道典型的面試題前端掘金在界中,開發人員的需求量一直居高不下。 排序算法 -- JavaScript 標準參考教程(alpha) - 前端 - 掘金來自《JavaScript 標準參考教程(alpha)》,by 阮一峰 目錄 冒泡排序 簡介 算法實現 選擇排序 簡介 算法實現 ... 圖例詳解那道 setTimeout 與循環閉包的經典面...
摘要:快速排序,參考排序算法的完整實現各種排序算法的完整實現如下冒泡排序選擇排序插入排序歸并排序快速排序,參考排序方法驗證冒泡排序選擇排序插入排序歸并排序快速排序源碼地址的數據結構與算法三源碼 1 排序和搜索算法 1.1 排序算法 1.1.1 冒泡排序 冒泡排序比較任何兩個相鄰的項,如果第一個比第二個大,則交換它們。元素項向上移動至正確的順序,就好像氣泡升至表面一樣,冒泡排序因此得名。冒泡...
摘要:推薦一下,,這里還有個可視化的排序博客,各大排序算法的實現都栩栩如生。堆排序堆排序是指利用堆這種數據結構所設計的一種排序算法。共勉參考維基百科排序搜索聊一聊排序算法秒殺種排序算法版排序圖解排序算法實現歡迎來我的博客交流 最近看到了很多公司都在準備明年的實習校招,雖然離三月份還有一段時間,感覺已經可以準備了。在網上看了一些排序算法和數組去重操作,感覺都寫的很好,心血來潮,也來寫一寫。 s...
摘要:回顧選擇排序,插入排序,冒泡排序,快速排序,希爾排序,歸并排序,堆排序以及如何計算時間復雜度學習文章同學的描述數據結構等同學的十大經典算法本文代碼也上傳到了排序算法回顧。但希爾排序是非穩定排序算法。 回顧選擇排序,插入排序,冒泡排序,快速排序,希爾排序,歸并排序,堆排序以及如何計算時間復雜度學習文章:hahda同學的javascript描述數據結構、hustcc等同學的十大經典算法 ...
閱讀 3229·2021-11-23 09:51
閱讀 1039·2021-08-05 09:58
閱讀 668·2019-08-29 16:05
閱讀 979·2019-08-28 18:17
閱讀 3036·2019-08-26 14:06
閱讀 2726·2019-08-26 12:20
閱讀 2161·2019-08-26 12:18
閱讀 3069·2019-08-26 11:56