摘要:參考冒泡排序典型的排序方法,命名來自魚呼吸時吹出的氣泡,上層的氣泡總是最大的。時間復(fù)雜度,屬于不穩(wěn)定的算法特殊情況下會是空間復(fù)雜度輔助空間是,所以空間復(fù)雜度為
參考lianjie
冒泡排序
典型的排序方法,命名來自魚呼吸時吹出的氣泡,上層的氣泡總是最大的。
思路:兩層循環(huán),內(nèi)層循環(huán)對比相鄰兩個數(shù)據(jù)(j,j+1),假設(shè)j > j + 1則交換元素位置。
外層循環(huán)為長度限制,在內(nèi)層第一次循環(huán)完成后減少長度1(因為最后一個泡已經(jīng)固定,為這個數(shù)組的最大值)
function bubbleSort(arr){ for(let i = 0; i < arr.length - 1; i++){ let flag = false; for(let j = 0; j < arr.length - i - 1; j++){ if(arr[j] > arr[j + 1]){ let temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp;; flag = true; } } if(!flag){ break; } } return arr; }
加一個標(biāo)志位flag,如果沒有進行交換,將標(biāo)志位置為false,表示排序完成。
時間復(fù)雜度O(n^2),最優(yōu)情況下是O(n)
空間復(fù)雜度O(1)
選擇排序
顧名思義,每次都選擇最小的,然后交換位置
思路:兩層循環(huán),內(nèi)層循環(huán)為選取第一個位置的值,然后將它與剩下的值作對比,得到比它小的則交換位置。外層循環(huán)為控制第一位值的固定(一次循環(huán)后,第一位則為該數(shù)組最小的值,下一次循環(huán)不必帶上)。
function selectionSort(arr){ for(let i = 0; i < arr.length - 1; i++){ let index = i; for(let j = i+1; j < arr.length; j++){ //判斷是否有小于當(dāng)前值,有則交換位置 if(arr[index] > arr[j]){ index = j; } } let temp = arr[i]; arr[i] = arr[index ]; arr[index] = temp; } return arr; }
時間復(fù)雜度:O(n^2),屬于不穩(wěn)定的算法(每次交換之后,它都改變了后續(xù)數(shù)組的順序)
空間復(fù)雜度:O(1)
快速排序
思路:二分法,先找一個基數(shù),分隔出以基數(shù)為界的左右兩個數(shù)組,然后遞歸重復(fù)這個步驟,直到分組剩余一個數(shù),則我們認(rèn)為已經(jīng)排列完成。
function quickSort(arr){ if(arr.length <= 1){ return arr; } let temp = arr[0]; const left = []; const right = []; for(var i = 1; i < arr.length; i++){ if(arr[i] > temp){ right.push(arr[i]); }else{ left.push(arr[i]); } } return quickSort(left).concat([temp], quickSort(right)); }
時間復(fù)雜度:O(n*logn),屬于不穩(wěn)定的算法,特殊情況下會是O(n^2)
空間復(fù)雜度:輔助空間是logn,所以空間復(fù)雜度為O(logn)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/104911.html
摘要:前言排序算法可能是你學(xué)編程第一個學(xué)習(xí)的算法,還記得冒泡嗎當(dāng)然,排序和查找兩類算法是面試的熱門選項。本篇將會總結(jié)一下,在前端的一些排序算法。函數(shù)的性能相信對于排序算法性能來說,時間復(fù)雜度是至關(guān)重要的一個參考因素。 前言 排序算法可能是你學(xué)編程第一個學(xué)習(xí)的算法,還記得冒泡嗎? 當(dāng)然,排序和查找兩類算法是面試的熱門選項。如果你是一個會寫快排的程序猿,面試官在比較你和一個連快排都不會寫的人的時...
摘要:與異步編程按照維基百科上的解釋獨立于主控制流之外發(fā)生的事件就叫做異步。因為的存在,至少在被標(biāo)準(zhǔn)化的那一刻起,就支持異步編程了。然而異步編程真正發(fā)展壯大,的流行功不可沒。在握手過程中,端點交換認(rèn)證和密鑰以建立或恢復(fù)安全會話。 1、前端 排序算法總結(jié) 排序算法可能是你學(xué)編程第一個學(xué)習(xí)的算法,還記得冒泡嗎? 當(dāng)然,排序和查找兩類算法是面試的熱門選項。如果你是一個會寫快排的程序猿,面試官在比較...
摘要:與異步編程按照維基百科上的解釋獨立于主控制流之外發(fā)生的事件就叫做異步。因為的存在,至少在被標(biāo)準(zhǔn)化的那一刻起,就支持異步編程了。然而異步編程真正發(fā)展壯大,的流行功不可沒。在握手過程中,端點交換認(rèn)證和密鑰以建立或恢復(fù)安全會話。 1、前端 排序算法總結(jié) 排序算法可能是你學(xué)編程第一個學(xué)習(xí)的算法,還記得冒泡嗎? 當(dāng)然,排序和查找兩類算法是面試的熱門選項。如果你是一個會寫快排的程序猿,面試官在比較...
摘要:與異步編程按照維基百科上的解釋獨立于主控制流之外發(fā)生的事件就叫做異步。因為的存在,至少在被標(biāo)準(zhǔn)化的那一刻起,就支持異步編程了。然而異步編程真正發(fā)展壯大,的流行功不可沒。在握手過程中,端點交換認(rèn)證和密鑰以建立或恢復(fù)安全會話。 1、前端 排序算法總結(jié) 排序算法可能是你學(xué)編程第一個學(xué)習(xí)的算法,還記得冒泡嗎? 當(dāng)然,排序和查找兩類算法是面試的熱門選項。如果你是一個會寫快排的程序猿,面試官在比較...
摘要:在一段時間的學(xué)習(xí)之后,我總結(jié)羅列了前端中常見見的幾個算法一排序算法排序算法是比較開發(fā)的算法之一,方法種類較多,在此列舉兩種簡單的排序算法冒泡排序和快速排序。 雖說我們很多時候前端很少有機會接觸到算法,但對算法的理解和掌握是一個優(yōu)秀工程師的評價標(biāo)準(zhǔn)之一,而且當(dāng)我們面對較為復(fù)雜的問題,這些基礎(chǔ)知識的積累可以幫助我們更好的優(yōu)化解決思路。在一段時間的學(xué)習(xí)之后,我總結(jié)羅列了前端中常見見的幾個算法...
摘要:今天同學(xué)去面試,做了兩道面試題全部做錯了,發(fā)過來給道典型的面試題前端掘金在界中,開發(fā)人員的需求量一直居高不下。 排序算法 -- JavaScript 標(biāo)準(zhǔn)參考教程(alpha) - 前端 - 掘金來自《JavaScript 標(biāo)準(zhǔn)參考教程(alpha)》,by 阮一峰 目錄 冒泡排序 簡介 算法實現(xiàn) 選擇排序 簡介 算法實現(xiàn) ... 圖例詳解那道 setTimeout 與循環(huán)閉包的經(jīng)典面...
閱讀 3218·2021-11-17 09:33
閱讀 3298·2021-11-15 11:37
閱讀 2965·2021-10-19 11:47
閱讀 3214·2019-08-29 15:32
閱讀 1018·2019-08-29 15:27
閱讀 1538·2019-08-29 13:15
閱讀 942·2019-08-29 12:47
閱讀 2035·2019-08-29 11:30