摘要:用冒泡排序快速排序選擇排序冒泡排序冒泡排序是比較經(jīng)典的排序方法,是一種用時(shí)間換空間的排序方法。找到并交換的時(shí)候,指針位置不變。選擇排序沒趟都會(huì)產(chǎn)生最小值,它不是相鄰元素的比較而是在該元素設(shè)置一個(gè)索引。選擇排序循環(huán)找到從開始到最后的最小的數(shù)
用js冒泡排序,快速排序,選擇排序 1.冒泡排序
冒泡排序是比較經(jīng)典的排序方法,是一種用時(shí)間換空間的排序方法。我總結(jié)了一下它的特點(diǎn):(1)它的時(shí)間復(fù)雜度是;(2)每一趟相鄰元素兩兩比較完畢就會(huì)產(chǎn)生最值(最大值);(3)每次比較完后下一趟就會(huì)少一個(gè)元素參與比較(即該趟比較的最大值)。
// 冒泡排序
function maopao(arr){ for(var i=0;i快速排序arr[j]){ temp = arr[i]; arr[i]=arr[j]; arr[j]=temp; } } } return arr; } var arr = [1,9,3,7,2,8,3,99,44,1,6]; maopao(arr); console.log("冒泡排序"); console.log(arr);
// 2.快速排序
一趟快速排序的算法是:
1)設(shè)置兩個(gè)變量i、j,排序開始的時(shí)候:i=0,j=N-1;
2)以第一個(gè)數(shù)組元素作為關(guān)鍵數(shù)據(jù),賦值給key,即 key=A[0];
3)從j開始向前搜索,即由后開始向前搜索(j=j-1即j--), 找到第一個(gè)小于key的值A(chǔ)[j],A[i]與A[j]交換;
4)從i開始向后搜索,即由前開始向后搜索(i=i+1即i++), 找到第一個(gè)大于key的A[i],A[i]與A[j]交換;
5)重復(fù)第3、4、5步,直到I=J; (3,4步是在程序中沒找到時(shí)候j=j-1,i=i+1,直至找到為止。 找到并交換的時(shí)候i, j指針位置不變。另外當(dāng)i=j這過程一定正好是i+或j-完成的最后令循環(huán)結(jié)束)
function quickSort(arr){ // 如果數(shù)組長(zhǎng)度小于等于1,直接返回 if(arr.length<=1){return arr;} // 選擇一個(gè)基準(zhǔn) var pivotIndex = Math.floor(arr.length/2); // 將基準(zhǔn)與原數(shù)組分離 var pivot = arr.splice(pivotIndex,1)[0]; // 定義左右兩個(gè)空數(shù)組用來存放 var left = []; var right=[]; // 循環(huán),如果小于基準(zhǔn)就放左邊,大于基準(zhǔn)就放右邊 for(var i=0;i3.選擇排序 選擇排序相比冒泡排序不穩(wěn)定,時(shí)間復(fù)雜度也是。選擇排序沒趟都會(huì)產(chǎn)生最小值,它不是相鄰元素的比較而是在該元素設(shè)置一個(gè)索引i。然后與數(shù)組的其他元素依次比較(除了上一個(gè)索引值),直到找到小于該元素(索引j)時(shí)交換兩元素,接著繼續(xù)從i索引(此時(shí)已經(jīng)不是原來的數(shù)值)值與索引j+1值比較。
// 選擇排序function selectSort(arr){ var minIndex; var temp; // 循環(huán) for(var i=0;i
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/94708.html
摘要:冒泡排序冒泡排序算法的運(yùn)作如下比較相鄰的元素。交換次數(shù)比冒泡排序少多了快速排序快速排序算法的運(yùn)作如下找一個(gè)數(shù),對(duì)數(shù)組進(jìn)行掃描,小于這個(gè)數(shù)的放在這個(gè)數(shù)的左側(cè),大于它的放在數(shù)組右側(cè)在對(duì)左右兩側(cè)的數(shù)組分別進(jìn)行剛才的操作,直到數(shù)組長(zhǎng)度為時(shí)結(jié)束。 1.冒泡排序 1.1 冒泡排序算法的運(yùn)作如下: 1.比較相鄰的元素。如果第一個(gè)比第二個(gè)大,就交換他們兩個(gè)。 2.對(duì)每一對(duì)相鄰元素作同樣的工作,從開始第...
摘要:上一篇數(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)容:排序和搜索。在這篇博客之前,我每每看到排序頭就是大的,心里想著類似冒泡排序,兩層遍歷啪啪啪就完事了,然后再也無心去深入研究排序相...
摘要:本文對(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í)不...
摘要:優(yōu)化當(dāng)待排序序列長(zhǎng)度時(shí),使用插入排序,可以加速排序。插入排序原理通過構(gòu)建有序序列,對(duì)于未排序元素,在已排序序列中從后向前掃描,找到相應(yīng)位置并插入。堆排序可通過樹形結(jié)構(gòu)保存部分比較結(jié)果,可減少比較次數(shù)。 前端學(xué)習(xí):教程&開發(fā)模塊化/規(guī)范化/工程化/優(yōu)化&工具/調(diào)試&值得關(guān)注的博客/Git&面試-前端資源匯總 歡迎提issues斧正:排序算法 JavaScript-排序算法及簡(jiǎn)易優(yōu)化 快速...
閱讀 1861·2021-09-23 11:21
閱讀 707·2019-08-30 15:55
閱讀 844·2019-08-29 15:40
閱讀 541·2019-08-29 12:56
閱讀 3175·2019-08-26 12:00
閱讀 3567·2019-08-23 18:24
閱讀 2260·2019-08-23 17:08
閱讀 1649·2019-08-23 17:03