排序算法——快速排序

快速排序记劈,可以稱得上是21世紀(jì)最偉大的算法之一,它的性能也是相當(dāng)不錯的并巍,它的平均時間復(fù)雜度是O(nlogn)是一種非常高效的算法目木,幾乎我們每門語言當(dāng)中的系統(tǒng)排序算法中都有一部分是基于快速排序算法實現(xiàn)的。

快速排序的思想也很簡單懊渡,就是每一次刽射,都將一個數(shù)送到它最終的位置上面华匾,并且它前面的數(shù)都比它小八秃,后面的數(shù)都比它大,每一輪都這樣然后遞歸執(zhí)行风范,最終就會實現(xiàn)整個數(shù)組完全有序的狀態(tài)肾档。

當(dāng)然快排的優(yōu)點肯定是平均性能好摹恰,但是快排對于已經(jīng)比較接進(jìn)完全有序的數(shù)組,會暴露出自己的問題怒见,這時它會達(dá)到自己的最壞的性能俗慈,目前解決這種問題的方法也有很多,當(dāng)然只能減少這中情況的發(fā)生遣耍,并不能避免闺阱,但在數(shù)學(xué)期望的角度上,會讓它的性能更優(yōu)舵变,具體做法:

1.我們可以在快速排序一個數(shù)組之前酣溃,運(yùn)行一個算法來打亂原數(shù)組
2.我們可以每次選定標(biāo)準(zhǔn)的時候,并不選擇第一個數(shù)棋傍,而是隨機(jī)選定一個待排序范圍內(nèi)的數(shù)字

我們現(xiàn)在就可以自己實現(xiàn)一個二路快速排序算法:

/**
 * Created by linSir on 17/2/10.
 */
function paration(list, l, r) {
    var first = list[l];
    var left = l;
    var right = r;
    var temp;
    while (left < right) {
        while (list[right] > first && left < right) {
            right--;
        }
        if (left < right) {
            list[left] = list[right];
            left++;
        }
        while (list[left] <= first && left < right) {
            left++;
        }
        if (left < right) {
            list[right] = list[left];
            right--;
        }
        list[left] = first;
    }
    return left;
}

function quickSort(list, l, r) {
    if (l >= r) {
        return;
    }
    var temp;
    temp = paration(list, l, r);
    console.log(temp);
    quickSort(list, l, temp - 1);
    quickSort(list, temp + 1, r);
    return list;

}


var list = [3, 1, 2, 4, 5, 6, 7];
console.log(quickSort(list, 0, 6));

結(jié)果:

運(yùn)行效果圖

現(xiàn)在我們所寫的算法就是基本的快速排序算法了救拉。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末难审,一起剝皮案震驚了整個濱河市瘫拣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌告喊,老刑警劉巖麸拄,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異黔姜,居然都是意外死亡拢切,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門秆吵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來淮椰,“玉大人,你說我怎么就攤上這事≈魉耄” “怎么了泻拦?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長忽媒。 經(jīng)常有香客問我争拐,道長,這世上最難降的妖魔是什么晦雨? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任架曹,我火速辦了婚禮,結(jié)果婚禮上闹瞧,老公的妹妹穿的比我還像新娘绑雄。我一直安慰自己,他們只是感情好夹抗,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布绳慎。 她就那樣靜靜地躺著,像睡著了一般漠烧。 火紅的嫁衣襯著肌膚如雪杏愤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天已脓,我揣著相機(jī)與錄音珊楼,去河邊找鬼。 笑死度液,一個胖子當(dāng)著我的面吹牛厕宗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播堕担,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼已慢,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了霹购?” 一聲冷哼從身側(cè)響起佑惠,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎齐疙,沒想到半個月后膜楷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡贞奋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年赌厅,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片轿塔。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡特愿,死狀恐怖仲墨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情揍障,我是刑警寧澤宗收,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站亚兄,受9級特大地震影響混稽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜审胚,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一匈勋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧膳叨,春花似錦洽洁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至龄坪,卻和暖如春昭雌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背健田。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工烛卧, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人妓局。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓总放,卻偏偏與公主長得像,于是被迫代替她去往敵國和親好爬。 傳聞我的和親對象是個殘疾皇子局雄,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 快速排序是最經(jīng)典,最常用的高效排序算法之一存炮【娲睿快排和歸并排序算法一樣,采用的是分治的思想僵蛛。具體步驟如下: 分:從未排...
    葉孤陳閱讀 305評論 0 2
  • 快速排序思想:1尚蝌、首先在一組待排序的元素中找到一個基準(zhǔn)數(shù)(一般用第一個)2迎变、然后用兩個游標(biāo)分別指向第一(最左)和最...
    WX_WDN閱讀 647評論 0 0
  • 快速排序是一種分治排序的算法充尉,將數(shù)組劃分為兩個部分,然后分別對兩個部分進(jìn)行排序衣形。在實際應(yīng)用中驼侠,一個經(jīng)過仔細(xì)調(diào)整的快...
    IgorNi閱讀 411評論 0 0
  • 簡介 快速排序,通過一趟掃描將要排序的數(shù)據(jù)分割成獨立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小,...
    歇歇閱讀 445評論 1 6
  • 題主是個學(xué)生,因為今天星期五笋熬,學(xué)校只有一個上午的課热某,所以下午約了朋友一起出去玩。 跟朋友一起吃飯胳螟,逛街昔馋,玩到了晚上...
    我文筆不好閱讀 1,741評論 0 0