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