摘要:冒泡排序冒泡排序算法的運(yùn)作如下比較相鄰的元素。交換次數(shù)比冒泡排序少多了快速排序快速排序算法的運(yùn)作如下找一個(gè)數(shù),對數(shù)組進(jìn)行掃描,小于這個(gè)數(shù)的放在這個(gè)數(shù)的左側(cè),大于它的放在數(shù)組右側(cè)在對左右兩側(cè)的數(shù)組分別進(jìn)行剛才的操作,直到數(shù)組長度為時(shí)結(jié)束。
1.冒泡排序 1.1 冒泡排序算法的運(yùn)作如下:
1.比較相鄰的元素。如果第一個(gè)比第二個(gè)大,就交換他們兩個(gè)。 2.對每一對相鄰元素作同樣的工作,從開始第一對到結(jié)尾的最后一對。在這一點(diǎn),最后的元素應(yīng)該會(huì)是最大的數(shù)。 3.針對所有的元素重復(fù)以上的步驟,除了最后一個(gè)。 4.持續(xù)每次對越來越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對數(shù)字需要比較。1.2 javaScript中的實(shí)現(xiàn)
var arr = [9,8,7,6,5,4,3,2,1,0]; //交換arr[i]和arr[j] function swap(arr,i,j){ var temp; temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } //冒泡排序 function bubbleSort(arr){ var leap = 0; if(arr.length==0) return; for(var i = 0 ; i < arr.length ; i++){ leap = 0; for(var j = 1 ; j < arr.length ; j++){ if(arr[j-1] > arr[j]){ swap(arr,j-1,j); leap = 1; } } //如果沒有交換,即排序正確,提前結(jié)束 if(leap == 0){ return; } } return arr; } console.log(bubbleSort(arr)); // arr = [0,1,2,3,4,5,6,7,8,9]
冒泡排序總的平均時(shí)間復(fù)雜度為Q(n^2)。
2.選擇排序 2.1 選擇排序算法的思想:循環(huán)arr.length次,從i=0開始,第i次循環(huán)將比較得到的最?。ɑ蜃畲螅┑臄?shù)與a[i]交換位置,即每次循環(huán)拿出最值放到其應(yīng)該在的位置,并且將其踢出下次循環(huán)。2.2 javaScript中的實(shí)現(xiàn)
//選擇排序 function selectionSort(arr){ var min; if(arr.length <= 1) return; for(var i = 0 ; i < arr.length-1 ; i++){ min=i; for(var j = i+1 ; j < arr.length ; j++) { if(arr[j] < arr[min]){ min = j; } } swap(arr,i,min); } return arr; } console.log(selectionSort(arr)); // arr = [0,1,2,3,4,5,6,7,8,9]
比較次數(shù)O(n^2),比較次數(shù)與關(guān)鍵字的初始狀態(tài)無關(guān),總的比較次數(shù)N=(n-1)+(n-2)+...+1=n*(n-1)/2。交換次數(shù)O(n),最好情況是,已經(jīng)有序,交換0次;最壞情況交換n-1次,逆序交換n/2次。交換次數(shù)比冒泡排序少多了
3.快速排序 3.1 快速排序算法的運(yùn)作如下:1.找一個(gè)數(shù),對數(shù)組進(jìn)行掃描,小于這個(gè)數(shù)的放在這個(gè)數(shù)的左側(cè),大于它的放在數(shù)組右側(cè) 2.在對左右兩側(cè)的數(shù)組分別進(jìn)行剛才的操作,直到數(shù)組長度為1時(shí)結(jié)束。3.2 javaScript中的實(shí)現(xiàn)
//快速排序 function fastSort(arr,begin,end){ //當(dāng)end <= begin時(shí)結(jié)束遞歸 if(end <= begin){ return ; } var t = begin; var i = begin+1; var j = end; var v = arr[begin]; while (i <= j){ //通過選定的軸和其后一個(gè)值進(jìn)行比較,如后一個(gè)值比他小則交換并且兩個(gè)同時(shí)加一并且再比較,如比他大則a[i]和a[j]進(jìn)行交換并且再比較a[begin]和a[i]的值 if (arr[i] <= v){ swap(arr, t++, i++); }else if(arr[i] > v){ swap(arr, i, j--); } } fastSort(arr, begin, t-1); fastSort(arr, j+1, end); } fastSort(arr,0,arr.length-1); console.log(arr); //arr = [0,1,2,3,4,5,6,7,8,9]
此快速排序是優(yōu)化過的,能否再優(yōu)化以后再試試看。
以上代碼有部分是借鑒的,如有不足請指教^_^
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/94736.html
摘要:用冒泡排序快速排序選擇排序冒泡排序冒泡排序是比較經(jīng)典的排序方法,是一種用時(shí)間換空間的排序方法。找到并交換的時(shí)候,指針位置不變。選擇排序沒趟都會(huì)產(chǎn)生最小值,它不是相鄰元素的比較而是在該元素設(shè)置一個(gè)索引。選擇排序循環(huán)找到從開始到最后的最小的數(shù) 用js冒泡排序,快速排序,選擇排序 1.冒泡排序 冒泡排序是比較經(jīng)典的排序方法,是一種用時(shí)間換空間的排序方法。我總結(jié)了一下它的特點(diǎn):(1)它的時(shí)間復(fù)...
摘要:上一篇數(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)容:排序和搜索。在這篇博客之前,我每每看到排序頭就是大的,心里想著類似冒泡排序,兩層遍歷啪啪啪就完事了,然后再也無心去深入研究排序相...
摘要:優(yōu)化當(dāng)待排序序列長度時(shí),使用插入排序,可以加速排序。插入排序原理通過構(gòu)建有序序列,對于未排序元素,在已排序序列中從后向前掃描,找到相應(yīng)位置并插入。堆排序可通過樹形結(jié)構(gòu)保存部分比較結(jié)果,可減少比較次數(shù)。 前端學(xué)習(xí):教程&開發(fā)模塊化/規(guī)范化/工程化/優(yōu)化&工具/調(diào)試&值得關(guān)注的博客/Git&面試-前端資源匯總 歡迎提issues斧正:排序算法 JavaScript-排序算法及簡易優(yōu)化 快速...
本篇有7k+字, 系統(tǒng)梳理了js中常見的12種排序算法。除了基本排序算法,文章還包含了希爾排序、堆排序、桶排序等較為復(fù)雜的排序?qū)崿F(xiàn),如果喜歡請點(diǎn)贊支持~謝謝. 原文: http://louiszhai.github.io/20... 導(dǎo)讀 排序算法可以稱得上是我的盲點(diǎn), 曾幾何時(shí)當(dāng)我知道Chrome的Array.prototype.sort使用了快速排序時(shí), 我的內(nèi)心是奔潰的(啥是快排, 我只知道...
摘要:之所以把冒泡排序選擇排序插入排序放在一起比較,是因?yàn)樗鼈兊钠骄鶗r(shí)間復(fù)雜度都為。其中,冒泡排序就是原地排序算法。所以冒泡排序是穩(wěn)定的排序算法。選擇排序思路選擇排序算法的實(shí)現(xiàn)思路有點(diǎn)類似插入排序,也分已排序區(qū)間和未排序區(qū)間。 showImg(https://segmentfault.com/img/bVbuvnj?w=900&h=250); 1. 前言 算法為王。 想學(xué)好前端,先練好內(nèi)功,...
閱讀 3706·2021-09-30 09:59
閱讀 2373·2021-09-13 10:34
閱讀 590·2019-08-30 12:58
閱讀 1522·2019-08-29 18:42
閱讀 2215·2019-08-26 13:44
閱讀 2936·2019-08-23 18:12
閱讀 3332·2019-08-23 15:10
閱讀 1637·2019-08-23 14:37