走進開發(fā),5分鐘熟悉快速排序和計數(shù)排序

本文通過動態(tài)可視化圖來解析快速排序法和計數(shù)排序法。

這幾天“手機殼顏色換主題色”需求引起一波轟動,關(guān)于事情真?zhèn)芜@里不做判斷。但技術(shù)仍然是實施手段,產(chǎn)品最終還是要靠技術(shù)來實現(xiàn),產(chǎn)品還是不能遠(yuǎn)離技術(shù)。多理解一點技術(shù)知識,和開發(fā)大佬說話就多了一份硬氣。連基礎(chǔ)的排序算法都不懂的產(chǎn)品經(jīng)理很難的得到開發(fā)及項目組的青睞。

那么你花5分鐘閱讀,再花5分鐘理解。以后就可以在公司走路帶風(fēng),抬頭挺胸。

關(guān)于“冒泡排序、插入及選擇排序”可以看之前一篇文章:走進開發(fā),5分鐘熟悉3種經(jīng)典排序算法

一、快速排序法

快速排序是冒泡排序的改進版,整個過程就在拆拆補補,東拆西補或西拆東補,一邊拆一邊補,直到所有元素達(dá)到有序狀態(tài)。

1. 快速排序法基本思路

先從數(shù)列中取出一個數(shù)作為基準(zhǔn)數(shù),然后進行大小分區(qū);

分區(qū)過程,將比這個數(shù)大的數(shù)全放到它的右邊,小于或等于它的數(shù)全放到它的左邊;

再對左右區(qū)間重復(fù)第二步,直到各區(qū)間只有一個數(shù),排序完成。

下面先通過圖文形式一步一步進行拆解。

拿[4,1,6,2,9,3]這個數(shù)組舉例。

第一遍遍歷:

先進行拆分?[4,1,6,2,9,3] 選擇元素 4 作為軸心點

檢查是否?1 < 4 (軸心點)

檢查是否?6 < 4 (軸心點)

檢查是否?2 < 4 (軸心點)

2 < 4 (軸心點) 是為真,將指數(shù)2和 存儲指數(shù) 6 進行交換

檢查是否?9 < 4 (軸心點)

檢查是否?3 < 4 (軸心點)

3 < 4 (軸心點) 為真,將指數(shù)3和存儲指數(shù)6 進行交換

將軸心點4和存儲指數(shù)3進行交換

此時軸心點4左邊全部小于4,右邊大于4

目前數(shù)組順序為[3,1,2,4,9,6]。

下一步:

先將左邊先排好序

選擇元素 3 作為軸心點

檢查是否?1 < 3 (軸心點)

檢查是否 2 < 3 (軸心點)

將軸心點 3和存儲指數(shù)值 2進行交換

現(xiàn)在軸心點已經(jīng)在排序過后的位置

進行拆分?[2,1] 選擇 2 作為軸心點

檢查是否?1 < 2 (軸心點)

左邊遍歷完成,將軸心點2和存儲指數(shù)1 進行交換

右邊同理……避免視覺疲勞就不一一描述了,可看下面動態(tài)演示圖。

2. 快速排序法全流程

3. 快速排序法總結(jié)

默認(rèn)取第一個元素為軸心點(軸心點的確認(rèn)區(qū)分了 “快速排序法”和“隨機排序法”)兩種算法,而隨機排序則隨機rand一個元素為軸心點;

如果兩個不相鄰元素交換,可以一次交換消除多個逆序,加快排序進程。

二、計數(shù)排序法

計數(shù)排序,顧名思義,就是把要排序的元素都一一計數(shù),某個數(shù)值如果總共有5個相同的,該元素對應(yīng)的個數(shù)就記為5;總共有10個相同的,就記為10。

1. 計數(shù)排序法基本思路

創(chuàng)建計數(shù)器;

遍歷數(shù)組中的每個元素在相應(yīng)的計數(shù)器增加1;

將計數(shù)器儲存好的元素從小到大重新收集;

重新將計數(shù)器元素重新存儲于原數(shù)組。

下面通過圖文形式一步一步進行案例拆解。

拿[8,6,4,1,6,2,9,6,2,4,3]這個數(shù)組舉例。

創(chuàng)建計數(shù)器1-9從小到大依次排列,然后遍歷數(shù)組里每一個元素對應(yīng)丟到相應(yīng)計數(shù)器

將8存到計數(shù)器8 此時計數(shù)器8有1個元素

將6存到計數(shù)器6 此時計數(shù)器6有1個元素

將4存到計數(shù)器4 此時計數(shù)器4有1個元素

將1存到計數(shù)器1 此時計數(shù)器1有1個元素

將6存到計數(shù)器6 此時計數(shù)器6有2個元素

將2存到計數(shù)器2 此時計數(shù)器2有1個元素

將9存到計數(shù)器9 此時計數(shù)器9有1個元素

將6存到計數(shù)器6 此時計數(shù)器6有3個元素

將2存到計數(shù)器2 …..

將4存到計數(shù)器4 ……

將3存到計數(shù)器3 ……

第二步:

將計數(shù)器里面的數(shù)組從小到大依次儲存于新數(shù)組列表

計數(shù)器1 有1個元素 重新放入新列表[1]

計數(shù)器2 有2個元素 重新放入新列表[1,2,2]

計數(shù)器3 有1個元素 重新放入新列表[1,2,2,3]

計數(shù)器4 有2個元素 重新放入新列表[1,2,2,3,4,4]

計數(shù)器6 有3個元素 重新放入新列表[1,2,2,3,4,4,6,6,6]

計數(shù)器8 有1個元素 重新放入新列表[1,2,2,3,4,4,6,6,6,8]

計數(shù)器9 有1個元素 重新放入新列表[1,2,2,3,4,4,6,6,6,8,9]

2. 計數(shù)排序全流程

3. 計數(shù)排序總結(jié)

排序不需要進行比較

在當(dāng)待排序數(shù)組內(nèi)有大量重復(fù)的數(shù)值并且這些數(shù)值較為集中時,使用計數(shù)排序有明顯的優(yōu)勢

除了以上兩種排序算法,還有許多不同的排序算法,每個都有其自身的優(yōu)點和使用場景,當(dāng)然也有局限性。可以多看幾遍全流程動態(tài)圖弄清來龍去脈,理解性地記憶,希望對你有用。

再附上之前一篇文章:走進開發(fā),5分鐘熟悉3種經(jīng)典排序算法

微信公眾號:首席吹牛官,人人都是產(chǎn)品經(jīng)理專欄作家。互聯(lián)網(wǎng)圈十八線作詞人,國家一級退堂鼓表演藝術(shù)家。顏良而文丑,歡迎交流。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文是我自己在秋招復(fù)習(xí)時的讀書筆記,整理的知識點,也是為了防止忘記,尊重勞動成果,轉(zhuǎn)載注明出處哦!如果你也喜歡,那...
    波波波先森閱讀 11,646評論 4 56
  • SET ES6 提供了新的數(shù)據(jù)結(jié)構(gòu) Set。它類似于數(shù)組,但是成員的值都是唯一的,沒有重復(fù)的值。Set 本身是一個...
    whowhenhowxxx閱讀 319評論 0 0
  • 你走的時候 草垛旁的楓樹 還是初生的紅 一葉葉 一匝匝 如荼蘼織墨 是春光時 末路狂花的激情 葉影 早已吻傷了遠(yuǎn)方...
    小曼的島閱讀 664評論 110 77
  • 第一題:人名虛擬。 晚上回到寢室,看到室友小芳新買了一件新裙子。 “小芳,那是你新買的小裙子嗎?” “嗯!是!” ...
    開荒girl閱讀 679評論 5 1
  • 你知道嗎 十八歲的我最大的夢想不是大學(xué) 是在以后的時間里 在我還算年輕的世界里 開一家花店 我會努力打理好那里 我...
    Queenstown2閱讀 187評論 0 1

友情鏈接更多精彩內(nèi)容