0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

2分鐘看懂快速排序的算法

學(xué)益得智能硬件 ? 來(lái)源:學(xué)益得智能硬件 ? 2023-02-25 09:32 ? 次閱讀

之前有同學(xué)提出想要復(fù)習(xí)一下排序算法,那我們今天就挑一個(gè)難度中等的,快速排序。

先搞清楚快速排序原理,然后再寫(xiě)代碼。

快速排序的原理不難,先找到一個(gè)數(shù)字,我們把它稱(chēng)作基準(zhǔn),然后通過(guò)一系列的比較交換,能讓基準(zhǔn)達(dá)到一個(gè)合適的位置,保證基準(zhǔn)前面的數(shù)字都比他小,后面的數(shù)字都比他大。

8c9db78a-b2b0-11ed-bfe3-dac502259ad0.png

這個(gè)過(guò)程需要兩個(gè)指針 x 和 y,其實(shí)就是數(shù)組的下標(biāo),x指向數(shù)組第一個(gè)數(shù)字,y指向數(shù)組最后一個(gè)數(shù)字。

為了操作方便,我們一般以第一個(gè)數(shù)字為基準(zhǔn)。

先把他記下來(lái)。

8cb9180e-b2b0-11ed-bfe3-dac502259ad0.png ?

然后從 y 開(kāi)始,4比3大,不用管,y 向前移動(dòng)。

8cdc0d78-b2b0-11ed-bfe3-dac502259ad0.png ?

2比 3 小,比基準(zhǔn)小的數(shù)字應(yīng)該放在左邊,所以把 2 移動(dòng)到前面,同時(shí) x 向后移動(dòng)。

8d15da1c-b2b0-11ed-bfe3-dac502259ad0.png ?

6比 3 大,放在后面,y 向前移動(dòng)。

8d5014ac-b2b0-11ed-bfe3-dac502259ad0.png ?

0比3小,放在前面,x向后移動(dòng)。

8d85eba4-b2b0-11ed-bfe3-dac502259ad0.png ?

7比3大,放在后面,y 向前移動(dòng)。

8db8b886-b2b0-11ed-bfe3-dac502259ad0.png ?

最后,x 和 y 相等,把3放到這個(gè)位置上。

8dd9834a-b2b0-11ed-bfe3-dac502259ad0.png

第一輪移動(dòng)結(jié)束?,F(xiàn)象就是,3的前面都是比3小的,3的后面都是比3大的。

接下來(lái)就是對(duì)3的前面和3的后面做同樣的操作,我們應(yīng)該立馬能想到遞歸。

搞清楚了原理還不夠,作為求職者把代碼寫(xiě)出來(lái)才是王道。

#include 


void quick_sort(int *a, int start, int end)
{
    if (start >= end)
        return;


    int x = start;
    int y = end;
    int base = a[start];


    while (x < y)
    {   
        while (a[y] > base && x < y)
        {   
            y--;
        }   


        if (x < y)
        {
            a[x++] = a[y];
        }


        while (a[x] < base && x < y)
        {
            x++;
        }


        if (x < y)
        {
            a[y--] = a[x];
        }
    }


    a[x] = base;


    quick_sort(a, start, x - 1);
    quick_sort(a, x + 1, end);
}


int main()
{
    int array[] = {3, 6, 7, 0, 2, 4};


    quick_sort(array, 0, 6);


    for (int i = 0; i < 6; i++)
    {
        printf("%d ", array[i]);
    }


    return 0;
}
快速排序是不是真的很快? 我們可以和冒泡排序做個(gè)對(duì)比,修改下代碼,隨機(jī)產(chǎn)生5萬(wàn)個(gè)數(shù)據(jù),使用冒泡排序和快速排序,時(shí)間上的差別確實(shí)很大。

冒泡排序:
real  0m8.255s
user  0m8.098s
sys  0m0.008s
快速排序:
real  0m0.078s
user  0m0.010s
sys  0m0.000s
要說(shuō)原因的話(huà),冒泡排序只能相鄰位置上比較移動(dòng),但是快速排序卻可以跳著來(lái),所以大部分情況下,快速排序效率都要高于冒泡排序。



審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 排序算法
    +關(guān)注

    關(guān)注

    0

    文章

    52

    瀏覽量

    10061
  • Array
    +關(guān)注

    關(guān)注

    99

    文章

    18

    瀏覽量

    17869

原文標(biāo)題:2分鐘看懂快速排序

文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    FPGA排序-冒泡排序介紹

    排序算法是圖像處理中經(jīng)常使用一種算法,常見(jiàn)的排序算法有插入排序、希爾
    發(fā)表于 07-17 10:12 ?1091次閱讀
    FPGA<b class='flag-5'>排序</b>-冒泡<b class='flag-5'>排序</b>介紹

    十大排序算法總結(jié)

    排序算法是最經(jīng)典的算法知識(shí)。因?yàn)槠鋵?shí)現(xiàn)代碼短,應(yīng)該廣,在面試中經(jīng)常會(huì)問(wèn)到排序算法及其相關(guān)的問(wèn)題。一般在面試中最??嫉氖?/div>
    的頭像 發(fā)表于 12-20 10:39 ?1126次閱讀

    matlab快速排序算法實(shí)現(xiàn)

    待排的記錄分割成獨(dú)立的兩部分,%其中前一部的 記錄的關(guān)鍵字均比另一部記錄的關(guān)鍵字小,%再分別對(duì)兩組記錄進(jìn)行遞歸分割,達(dá)到排序的目的%平均時(shí)間復(fù)雜度為O(log2(n))functi
    發(fā)表于 02-29 15:58

    嵌入式stm32實(shí)用的排序算法 - 交換排序

    合很多,我這里就不再一一舉例說(shuō)明,掌握排序的基本算法,到時(shí)候遇到就有用武之地。Ⅱ、排序算法分類(lèi)1.按存儲(chǔ)分類(lèi):內(nèi)部排序和外部
    發(fā)表于 04-12 13:14

    基于Hadoop的幾種排序算法研究

    如何高效排序是在對(duì)大數(shù)據(jù)進(jìn)行快速有效的分析與處理時(shí)的一個(gè)重要問(wèn)題。首先對(duì)基于Hadoop平臺(tái)的幾種高效的排序算法(Quicksort,Heapsort和Mergesort
    發(fā)表于 11-08 17:25 ?15次下載
    基于Hadoop的幾種<b class='flag-5'>排序</b><b class='flag-5'>算法</b>研究

    C語(yǔ)言教程之幾種排序算法

    數(shù)據(jù)結(jié)構(gòu)的排序算法有很多種。 其中, 快速排序 、希爾排序、堆排序、直接選擇
    發(fā)表于 11-16 10:23 ?1761次閱讀

    常用排序算法分析

    一種是比較排序,時(shí)間復(fù)雜度O(nlogn) ~ O(n^2),主要有:冒泡排序,選擇排序,插入排序,歸并
    的頭像 發(fā)表于 07-13 16:13 ?2163次閱讀

    實(shí)用的排序算法 - 交換排序

    實(shí)用的排序算法 - 交換排序
    的頭像 發(fā)表于 03-20 09:53 ?1744次閱讀
    實(shí)用的<b class='flag-5'>排序</b><b class='flag-5'>算法</b> -  交換<b class='flag-5'>排序</b>

    排序算法分享:歸并排序說(shuō)明

    我們今天繼續(xù)給大家分享排序算法里面的另外一種排序算法:歸并排序!
    的頭像 發(fā)表于 12-24 14:34 ?773次閱讀

    淺談希爾排序算法思想以及如何實(shí)現(xiàn)

    01 希爾排序算法思想 希爾排序也是一種插入排序,是簡(jiǎn)單插入排序改進(jìn)后的一個(gè)更高效版本,同時(shí)也是首批突破O(n^
    的頭像 發(fā)表于 06-30 10:05 ?2031次閱讀

    C語(yǔ)言排序快速排序的技巧

    快速排序是由東尼·霍爾所發(fā)展的一種排序算法。在平均狀況下,排序 n 個(gè)項(xiàng)目要Ο(n log n)次比較。在最壞狀況下則需要Ο(n
    的頭像 發(fā)表于 07-29 15:14 ?2483次閱讀
    C語(yǔ)言<b class='flag-5'>排序</b>中<b class='flag-5'>快速</b><b class='flag-5'>排序</b>的技巧

    2分鐘快速教你如何在華為模擬器ensp上進(jìn)行抓包?

    2分鐘快速教你如何在華為模擬器ensp上進(jìn)行抓包?
    的頭像 發(fā)表于 12-05 11:25 ?4565次閱讀

    排序算法有哪些

    合并 我們來(lái)具體看看例子,假設(shè)我們現(xiàn)在給定一個(gè)數(shù)組:[6,3,2,7,1,3,5,4],我們需要使用歸并算法對(duì)其排序,其大致過(guò)程如下圖所示: 階段可以理解為就是 遞歸拆分子序列 的
    的頭像 發(fā)表于 10-11 15:49 ?614次閱讀
    <b class='flag-5'>排序</b><b class='flag-5'>算法</b>有哪些

    分鐘看懂雪崩光電二極管

    分鐘看懂雪崩光電二極管
    的頭像 發(fā)表于 11-23 09:09 ?1924次閱讀
    三<b class='flag-5'>分鐘</b><b class='flag-5'>看懂</b>雪崩光電二極管

    分鐘看完看懂電機(jī)的接線(xiàn)方法

    今天給大家講解一下,看懂電機(jī)的接線(xiàn)方法,一分鐘看完,一看就懂!。 電機(jī)的接線(xiàn)方法無(wú)外乎以下兩種 1a星形接法(實(shí)物圖)
    發(fā)表于 03-31 15:40 ?3693次閱讀
    一<b class='flag-5'>分鐘</b>看完<b class='flag-5'>看懂</b>電機(jī)的接線(xiàn)方法