摘要:基本排序算法總結(jié)前言隨著的興起將推向的一個前所未有的高度作為為建立高性能的服務(wù)端而創(chuàng)建的運行平臺隨著時間的推移和生態(tài)鏈的完善已經(jīng)不再局部于服務(wù)端包括前端后端桌面這篇文章介紹的傳統(tǒng)的散打排序方法并用實現(xiàn)其功能如有需要可以對其封裝在隨后會介紹高
基本排序算法總結(jié) 前言
隨著node的興起, 將javascript推向的一個前所未有的高度, node作為為建立高性能的服務(wù)端而創(chuàng)建的js運行平臺隨著時間的推移和生態(tài)鏈的完善已經(jīng)不再局部于服務(wù)端,包括前端,后端,桌面,這篇文章介紹的傳統(tǒng)的散打排序方法,并用javascript實現(xiàn)其功能,如有需要可以對其封裝,在隨后會介紹高級排序算法---(希爾排序,歸并排序,快速排序),下面給出鏈接高級排序算法 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最新的解構(gòu)語法交換數(shù)據(jù) [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; }實驗對比
創(chuàng)建隨機生成數(shù)組:
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; })()
結(jié)論:
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("冒泡排序執(zhí)行時間:" + between); start = new Date().getTime(); selectionSort(myNums.dataStore).toString() stop = new Date().getTime(); between = stop - start; console.log("選擇排序執(zhí)行時間:" + between); start = new Date().getTime(); insertionSort(myNums.dataStore).toString() stop = new Date().getTime(); between = stop - start; console.log("插入排序執(zhí)行時間:" + between); console.log(new Date().getTime());
可知對于執(zhí)行效率: 選擇排序 > 插入排序要 > 冒泡
排序快,插入排序是這三種算法中最快的
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/107115.html
摘要:強烈推薦上值得前端學(xué)習(xí)的數(shù)據(jù)結(jié)構(gòu)與算法項目,包含圖的演示過程與視頻講解。該倉庫包含了多種基于的算法與數(shù)據(jù)結(jié)構(gòu),提供進一步閱讀的解釋和鏈接。數(shù)據(jù)結(jié)構(gòu)和算法必知必會的個代碼實現(xiàn)。 showImg(https://segmentfault.com/img/bVbvpYZ); 前言 算法為王。想學(xué)好前端,先練好內(nèi)功,內(nèi)功不行,就算招式練的再花哨,終究成不了高手;只有內(nèi)功深厚者,前端之路才會走得...
摘要:今天同學(xué)去面試,做了兩道面試題全部做錯了,發(fā)過來給道典型的面試題前端掘金在界中,開發(fā)人員的需求量一直居高不下。 排序算法 -- JavaScript 標準參考教程(alpha) - 前端 - 掘金來自《JavaScript 標準參考教程(alpha)》,by 阮一峰 目錄 冒泡排序 簡介 算法實現(xiàn) 選擇排序 簡介 算法實現(xiàn) ... 圖例詳解那道 setTimeout 與循環(huán)閉包的經(jīng)典面...
摘要:快速排序,參考排序算法的完整實現(xiàn)各種排序算法的完整實現(xiàn)如下冒泡排序選擇排序插入排序歸并排序快速排序,參考排序方法驗證冒泡排序選擇排序插入排序歸并排序快速排序源碼地址的數(shù)據(jù)結(jié)構(gòu)與算法三源碼 1 排序和搜索算法 1.1 排序算法 1.1.1 冒泡排序 冒泡排序比較任何兩個相鄰的項,如果第一個比第二個大,則交換它們。元素項向上移動至正確的順序,就好像氣泡升至表面一樣,冒泡排序因此得名。冒泡...
摘要:推薦一下,,這里還有個可視化的排序博客,各大排序算法的實現(xiàn)都栩栩如生。堆排序堆排序是指利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計的一種排序算法。共勉參考維基百科排序搜索聊一聊排序算法秒殺種排序算法版排序圖解排序算法實現(xiàn)歡迎來我的博客交流 最近看到了很多公司都在準備明年的實習(xí)校招,雖然離三月份還有一段時間,感覺已經(jīng)可以準備了。在網(wǎng)上看了一些排序算法和數(shù)組去重操作,感覺都寫的很好,心血來潮,也來寫一寫。 s...
摘要:回顧選擇排序,插入排序,冒泡排序,快速排序,希爾排序,歸并排序,堆排序以及如何計算時間復(fù)雜度學(xué)習(xí)文章同學(xué)的描述數(shù)據(jù)結(jié)構(gòu)等同學(xué)的十大經(jīng)典算法本文代碼也上傳到了排序算法回顧。但希爾排序是非穩(wěn)定排序算法。 回顧選擇排序,插入排序,冒泡排序,快速排序,希爾排序,歸并排序,堆排序以及如何計算時間復(fù)雜度學(xué)習(xí)文章:hahda同學(xué)的javascript描述數(shù)據(jù)結(jié)構(gòu)、hustcc等同學(xué)的十大經(jīng)典算法 ...
閱讀 3223·2021-11-23 09:51
閱讀 1030·2021-08-05 09:58
閱讀 663·2019-08-29 16:05
閱讀 971·2019-08-28 18:17
閱讀 3029·2019-08-26 14:06
閱讀 2721·2019-08-26 12:20
閱讀 2154·2019-08-26 12:18
閱讀 3064·2019-08-26 11:56