摘要:冒泡排序冒泡算法是比較相鄰的兩項(xiàng),如果前者比后者大,就交換他們。插入排序最好情況下時(shí)間復(fù)雜度是,其他情況下也都是。代碼演示插入排序歸并排序原生里面的方法,在里面是用歸并排序?qū)崿F(xiàn)的,而在里面是用快速排序的變體來實(shí)現(xiàn)的。
1、冒泡排序
冒泡算法是比較相鄰的兩項(xiàng),如果前者比后者大,就交換他們。 假設(shè)一共有n項(xiàng),那么一共需要n-1趟,第一趟需要交換n-1次,但是第一趟結(jié)束后,最后一項(xiàng)基本確定就是最大項(xiàng)了,所以第二次需要交換n-2次,第i次交換n-i次。
這種排序最好情況下時(shí)間復(fù)雜度是O(n),一般情況下時(shí)間復(fù)雜度是O(n2),最差情況下也是O(n2)。 這里是代碼演示:
冒泡排序
2、選擇排序
選擇排序是找到最小的一項(xiàng),然后和第一項(xiàng)交換位置,然后找到第二小的和第二項(xiàng)交換,依次類推,一共需要n-1次。
選擇排序在所有情況下空間復(fù)雜度都是O(n2)。 代碼演示:
選擇排序
3、插入排序
插入排序是將前面的項(xiàng)看做數(shù)組,然后后面的項(xiàng)根據(jù)大小插入到對(duì)應(yīng)的位置。比如第二項(xiàng)和第一項(xiàng)對(duì)比,他該插到第一項(xiàng)前面還是后面呢?第三項(xiàng)該插到一二項(xiàng)的哪個(gè)地方? 這個(gè)一般也需要插入n-1次。
插入排序最好情況下時(shí)間復(fù)雜度是O(n),其他情況下也都是O(n2)。 代碼演示:
插入排序
4、歸并排序
原生js里面的sort方法,在firefox里面是用歸并排序?qū)崿F(xiàn)的,而在chrome里面是用快速排序的變體來實(shí)現(xiàn)的。
歸并排序是一種分治的算法,他是將一個(gè)大數(shù)組分成無數(shù)的小數(shù)組,如果小數(shù)組里面只有一項(xiàng),那么直接返回,如果大于一項(xiàng),就繼續(xù)分,接著小數(shù)組合并成一個(gè)大數(shù)組,合并的時(shí)候左右會(huì)進(jìn)行比較大小,然后排序 代碼演示:
歸并排序
5、快速排序
快速排序也使用了分治的算法,也是把大數(shù)組分成小數(shù)組. 它會(huì)選擇一個(gè)中間元,創(chuàng)建兩個(gè)左右指針,然后分別從左右開始出發(fā),如果左指針遇到比中間元大的數(shù),它會(huì)停下來,而右邊的如果遇到比中間元小的數(shù),它也會(huì)停下來,然后兩者交換位置。 接著兩個(gè)指針繼續(xù)前進(jìn),直到左指針超過了右指針,這樣左邊的數(shù)就會(huì)小于中間元,右邊的數(shù)都會(huì)大于中間元,接下來分成左右數(shù)組,然后再進(jìn)行上面的操作,直到數(shù)組完全排序。
代碼演示:快速排序
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/80231.html
摘要:上一篇數(shù)據(jù)結(jié)構(gòu)與算法樹寫在前面這是學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法的最后一篇博客,也是在面試中常常會(huì)被問到的一部分內(nèi)容排序和搜索。 上一篇:JS數(shù)據(jù)結(jié)構(gòu)與算法_樹 寫在前面 這是《學(xué)習(xí)JavaScript數(shù)據(jù)結(jié)構(gòu)與算法》的最后一篇博客,也是在面試中常常會(huì)被問到的一部分內(nèi)容:排序和搜索。在這篇博客之前,我每每看到排序頭就是大的,心里想著類似冒泡排序,兩層遍歷啪啪啪就完事了,然后再也無心去深入研究排序相...
摘要:介紹排序算法是算法中最常見的算法之一,我這里要介紹的是排序算法中的三種基本算法冒泡排序選擇排序插入排序,在文章的后面我會(huì)對(duì)三種算法的速度進(jìn)行對(duì)比。 1.介紹 排序算法是算法中最常見的算法之一,我這里要介紹的是排序算法中的三種基本算法:冒泡排序、選擇排序、插入排序,在文章的后面我會(huì)對(duì)三種算法的速度進(jìn)行對(duì)比。 2.冒泡排序 冒泡排序其名來源與其算法實(shí)現(xiàn),會(huì)使得數(shù)組中的元素一個(gè)個(gè)從數(shù)組一端漂...
摘要:本文對(duì)一些排序算法進(jìn)行了簡(jiǎn)單分析,并給出了的代碼實(shí)現(xiàn)。平均時(shí)間復(fù)雜度不好分析,它是冒泡排序是穩(wěn)定的排序算法。冒泡排序是原地排序算法原地排序指的是空間復(fù)雜度是的排序算法。歸并排序,會(huì)將數(shù)組從中間分成左右兩部分。 本文對(duì)一些排序算法進(jìn)行了簡(jiǎn)單分析,并給出了 javascript 的代碼實(shí)現(xiàn)。因?yàn)楸疚陌舜罅康呐判蛩惴?,所以分析不?huì)非常詳細(xì),適合有對(duì)排序算法有一定了解的同學(xué)。本文內(nèi)容其實(shí)不...
本篇有7k+字, 系統(tǒng)梳理了js中常見的12種排序算法。除了基本排序算法,文章還包含了希爾排序、堆排序、桶排序等較為復(fù)雜的排序?qū)崿F(xiàn),如果喜歡請(qǐng)點(diǎn)贊支持~謝謝. 原文: http://louiszhai.github.io/20... 導(dǎo)讀 排序算法可以稱得上是我的盲點(diǎn), 曾幾何時(shí)當(dāng)我知道Chrome的Array.prototype.sort使用了快速排序時(shí), 我的內(nèi)心是奔潰的(啥是快排, 我只知道...
閱讀 3275·2021-10-14 09:42
閱讀 3592·2019-08-26 13:56
閱讀 3560·2019-08-26 11:59
閱讀 973·2019-08-23 18:00
閱讀 2242·2019-08-23 17:51
閱讀 3563·2019-08-23 17:17
閱讀 1504·2019-08-23 15:11
閱讀 5340·2019-08-23 15:05