麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 網(wǎng)站 > WEB開發(fā) > 正文

JS實現(xiàn)快速排序(QuickSort)

2024-04-27 15:15:34
字體:
供稿:網(wǎng)友

偶然看到阮一峰老師博客中幾年前的一個快速排序算法,每次循環(huán)一次都要創(chuàng)建兩個額外數(shù)組,如果數(shù)據(jù)量大的話要占用不少額外內(nèi)存。但是數(shù)組是引用類型,是可修改的,可以直接操作原數(shù)組本身來節(jié)約內(nèi)存。

下面自己寫了一個,當(dāng)做練手。(除去標(biāo)準(zhǔn)的雙向分類外,還稍稍優(yōu)化了代碼,也加了單項優(yōu)化方法,使其更加簡潔)

快速排序方法的關(guān)鍵在于選取一個值,將整個數(shù)組分為兩部分,小的在左,大的在右,下面就是這個函數(shù)的寫法:

//該函數(shù)的主要目的是交換數(shù)組中兩個元素的位置function swap(arr, index1, index2) { let data = arr[index1]; arr[index1] = arr[index2]; arr[index2] = arr[index1]; //數(shù)組是引用類型,允許修改原數(shù)組。}//選取隨機值,將數(shù)組分為兩部分function partition(arr, start, end) { let keyIndex = end, key = arr[keyIndex]; //將隨機值(以后稱key值)定為最后一個數(shù),也可以真的隨機選取,見下一行 // let keyIndex = Math.floor(Math.random() * (end - start)) + start; let i = start, j = end, order = true; //當(dāng)order為true時正向篩選,當(dāng)order為false時逆向篩選 //先從正向開始,因為我們把key值保存到了數(shù)組的結(jié)尾處。 while(i != j) { if(order) { //正向篩選 if (arr[i]>key) { swap(arr, i, j); //將大于key的數(shù)字和key進行交換 order = false; } else { i++; } } else { //逆向篩選 if(arr[j]<key) { swap(arr, i, j); //將小于key的數(shù)字和key進行交換 order = true; } else { j--; } } } return i;//返回key值最終的位置}

觀察分組算法partition不難發(fā)現(xiàn),其實i和j位置上始終有一個存著key值,然后和比它大或者比它小的值進行交換。那么我們也可以將其寫成一個單向的分組方法:

function partition2(arr, start, end) { let keyIndex = end, key = arr[end]; let i = start -1, j = start; for (;j<end;j++) { if (arr[j]< key) { // i位置的值永遠(yuǎn)比key值小 i++; if (i != j) { swap(arr, i, j); } } } ++i; swap(arr, i, end); return i; //返回key值最終的位置}

接下來遞歸調(diào)用分組函數(shù),將整個數(shù)組排序:

function quickSort(arr, start, end) { if (start == end) return; let index = partition(arr, start, end); if (index > start){ quickSort(arr, start, index-1); } if (index<end) { quickSort(arr, index+1, end); }}

代碼請見: https://github.com/jian-cui/algorithm/blob/master/quickSort.js


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 九九精品免费 | av免费大全 | 久久久久在线观看 | 可以免费看av | 一级做受毛片免费大片 | 一本色道久久99精品综合蜜臀 | 午夜精品成人 | 一级毛片在线免费观看 | 人人做人人看 | 亚洲成年人免费网站 | 13一14毛片免费看 | 亚洲精品午夜国产va久久成人 | 国产精品av久久久久久网址 | 色中色在线播放 | 成人免费一区二区 | 黄视频网站免费 | 亚洲成人免费视频在线 | 日韩中字幕 | 国产精品午夜一区 | 羞羞视频一区 | 久久人人做| av资源在线天堂 | 51国产偷自视频区视频小蝌蚪 | 欧美性受ⅹ╳╳╳黑人a性爽 | 91精品成人福利在线播放 | 国产一区免费视频 | 久久久久久久久成人 | 成年人黄视频 | 国产精品久久久久久久久久妇女 | 成人免费在线观看视频 | 在线成人免费视频 | 欧美精品一级片 | 久久国产精品久久精品国产演员表 | 成人不卡一区二区 | 亚洲成在人| 久久久久久久久久久影视 | 最新av在线播放 | 国产精品视频不卡 | 久久精品久久精品久久精品 | 噜噜社| 免费永久看羞羞片网站入口 |