算法之快速排序(遞歸實(shí)現(xiàn))

什么是遞歸函數(shù)呢?
在函數(shù)內(nèi)部称勋,可以調(diào)用其他函數(shù)胸哥。如果一個(gè)函數(shù)在內(nèi)部調(diào)用自身本身,這個(gè)函數(shù)就是遞歸函數(shù)赡鲜。

編寫遞歸函數(shù)時(shí)空厌,必須告訴它何時(shí)停止遞歸。正因?yàn)槿绱艘辏總€(gè)遞歸
函數(shù)都有兩部分:基線條件 (base case)和遞歸條件 (recursive
case)嘲更。遞歸條件指的是函數(shù)調(diào)用自己,而基線條件則指的是函數(shù)不再
調(diào)用自己揩瞪,從而避免形成無(wú)限循環(huán)赋朦。

def countdown(i):
    '''遞歸舉例方法'''
    print (i)
    if(i<=0):  #-------------------------------------------基線條件
        print("函數(shù)執(zhí)行完成")
        return
    else:    #----------------------------------------------遞歸條件
         i=i-1
        countdown(i)

快速排序
排序一個(gè)數(shù)組arry1=[4,6,3,5,2],從大到小排列數(shù)組中的元素值

思路:
通過(guò)一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小李破,然后再按此方法對(duì)這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序宠哄,整個(gè)排序過(guò)程可以遞歸進(jìn)行,以此達(dá)到整個(gè)數(shù)據(jù)變成有序序列嗤攻。

image.png
  • 1
    首先毛嫉,從數(shù)組中選擇一個(gè)元素,這個(gè)元素被稱為基準(zhǔn)值
    暫時(shí)將數(shù)組的第一個(gè)元素用作基準(zhǔn)值屯曹。


    image.png
  • 2
    4作為基準(zhǔn)值狱庇,以4為基準(zhǔn)惊畏,把原始數(shù)組arry1分成兩部分?jǐn)?shù)組恶耽,
    arry2:比4小的部分
    arry3:比4大的部分


    image.png

    -3 在數(shù)組arry2中以第一個(gè)元素作為基準(zhǔn)值


    image.png

    --3.1
    arry2分成兩部分,比3小的一部分arry21颜启,與比3大的一部分arry22
    這時(shí)arry21與arry22中的元素都不超過(guò)1個(gè)了偷俭,不用往下再分
    image.png

    --3.2arry2中完成排序
    image.png

    --4同理在arry3中以以第一個(gè)元素作為基準(zhǔn)值


    image.png

--4.1
arry3分成兩部分,比6小的一部分arry31缰盏,與比6大的一部分arry32
這時(shí)arry31與arry32中的元素都不超過(guò)1個(gè)了涌萤,不用往下再分


image.png

--4.2arry3中完成排序


image.png

-5把集合arry2 基準(zhǔn)值4 數(shù)組arry3組合起來(lái),完成對(duì)原始數(shù)組的排序


image.png
image.png

完整代碼:

  • C#
   #region 快速排序
        /// <summary>
        /// 快速排序
        /// </summary>
        /// <param name="Arrylist">要排序的集合</param>
        /// <returns></returns>
        public static List<int> KuaiPaiMethod(List<int> Arrylist)
        {
           
            if (Arrylist.Count < 2)
            {
                return Arrylist;
            }
            //比基準(zhǔn)值小的數(shù)據(jù)集合
            List<int> MinArry = new List<int>();
            //比基準(zhǔn)值大的數(shù)據(jù)集合
            List<int> MaxArry = new List<int>();
            int label_value = Arrylist[0];//比較基準(zhǔn)值
            for (int i = 1; i < Arrylist.Count; i++)
            {
                if (Arrylist[i] <= label_value)
                {
                    MinArry.Add(Arrylist[i]);
                }
                else
                {
                    MaxArry.Add(Arrylist[i]);
                }
            }          
            var result = KuaiPaiMethod(MinArry);
            var MaxSum = KuaiPaiMethod(MaxArry);
            result.Add(label_value);
            result.AddRange(MaxSum);
            return result;
        }
    #endregion
  • Python
def KuaiPai(arry):
    '''快速排序(從小到大)'''
    if len(arry)<2:
        return arry
    else:
        lable_num=arry[0]#基準(zhǔn)值
        min_arry=[]
        max_arry=[]
        for x in arry[1:]:
            if  x<=lable_num:
                min_arry.append(x)
            else:
                max_arry.append(x)
    #把幾個(gè)數(shù)組直接相加口猜,合并為一個(gè)數(shù)組
    return KuaiPai(min_arry)+[lable_num]+KuaiPai(max_arry)

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末负溪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子济炎,更是在濱河造成了極大的恐慌川抡,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件须尚,死亡現(xiàn)場(chǎng)離奇詭異崖堤,居然都是意外死亡侍咱,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門密幔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)楔脯,“玉大人,你說(shuō)我怎么就攤上這事胯甩∶镣ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵偎箫,是天一觀的道長(zhǎng)麸粮。 經(jīng)常有香客問我,道長(zhǎng)镜廉,這世上最難降的妖魔是什么弄诲? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮娇唯,結(jié)果婚禮上齐遵,老公的妹妹穿的比我還像新娘。我一直安慰自己塔插,他們只是感情好梗摇,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著想许,像睡著了一般伶授。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上流纹,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天糜烹,我揣著相機(jī)與錄音,去河邊找鬼漱凝。 笑死疮蹦,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的茸炒。 我是一名探鬼主播愕乎,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼壁公!你這毒婦竟也來(lái)了感论?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤紊册,失蹤者是張志新(化名)和其女友劉穎比肄,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡薪前,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年润努,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片示括。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡铺浇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出垛膝,到底是詐尸還是另有隱情鳍侣,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布吼拥,位于F島的核電站倚聚,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏凿可。R本人自食惡果不足惜惑折,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦掏熬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)纳击。三九已至续扔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間焕数,已是汗流浹背纱昧。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留百匆,地道東北人砌些。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓呜投,卻偏偏與公主長(zhǎng)得像加匈,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子仑荐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

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