若干年前pony在騰訊產品暨技術峰會上就說過:“我們希望的產品經理是從技術晉升而來的。”技術是實施手段,產品最終還是要靠技術來實現,產品還是不能遠離技術。
那么不想通過枯燥的代碼來理解幾大排序算法,本文通過動態可視化圖來解析冒泡排序、選擇排序及插入排序。
排序算法最終目的是讓無序的數據組合變成有序的數據組合。
一、冒泡法
從字面上能理解, “冒泡”即小值的浮上來,大值沉下去。
1. 冒泡排序法基本思路
第一步比較相鄰的元素大小。如果第一個比第二個大,就交換兩個元素位置。
之后對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最后一對。在這一點最后的元素應該會是最大的數。
針對所有的元素重復以上的步驟,除了最后一個。
持續每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較。
下面先通過圖文形式一步一步進行案例拆解。
拿[20,10,15,30,12]這個數組舉例。
第一遍循環
檢查是否 20 > 10;是,交換元素位置;
檢查是否 20 > 15;是,交換元素位置;
檢查是否 20 > 30;否,位置不做交換;
檢查是否 30 > 12;是,交換元素位置;
第一遍循環結束,此時將最后一個沒有排序過的元素標記為已排序(即30)。因為在最近的一次掃描過程中至少有一次交換發生過,我們可以進行另一輪掃描。此輪掃描只需要循環判斷前面4個元素。
第二遍循環開始
檢查是否 10 大于 15;否,位置不做交換;
檢查是否 15 大于 20;否,位置不做交換;
檢查是否 20 大于 12; 是,交換元素位置;
此時標記 “20”為已排序,那么同理下一輪循環遍歷只需循環判斷前面3個元素。
……….
避免視覺疲勞,圖文只說明前面2輪循環,下面的3輪循環大家自己思考和理解。
2. 冒泡排序法全流程
3. 冒泡法總結
每一輪左右元素兩兩比較,不進行跨元素比較
每一輪循環比較都會產生當前最大值(當前最大值:這一輪下來的最大值)
每一輪循環后就會少一個元素進行比較(因為每結束一輪就會產生一個當前最大值)
二、選擇排序法
選擇排序是從冒泡排序演化而來,每一輪比較得出最小的那個值,然后依次和每輪“無序區”中參與比較的第一個值進行交換。
1. 選擇排序法基本思路
初始時在序列中找到最小元素
放到序列的起始位置作為已排序序列
然后再從剩余未排序元素中繼續尋找最小元素,放到已排序序列的末尾
以此類推,直到所有元素均排序完畢
注意選擇排序與冒泡排序的區別:
冒泡排序通過依次交換相鄰兩個順序不合法的元素位置,從而將當前最大元素放到合適的位置;而選擇排序每循環遍歷一次都記住了當前最小元素的位置,最后僅需一次交換操作即可將其放到合適的位置。
下面還是以[20,10,15,30,12]這個數組舉例。
第一遍循環
先把最小值設置成為 20 , 然后通過遍歷剩下的沒有排序過的元素來找到真正的最小值;
檢查是否 10 小于現在的最小值 (20)。是,將 10 設為新的最小值;
檢查是否 15 小于現在的最小值 (10)。否,10仍然是最小值;
檢查是否 30 小于現在的最小值 (10)。否,10仍然是最小值;
檢查是否 12 小于現在的最小值 (10)。否,10仍然是最小值。
一輪過后,最小值出現。
交換最小的元素 (10) 和第一個沒有排序過的元素 (20)。
現在10是被認定整個數組最小的值。
第二遍循環
把現在的最小值設置成為 20 , 然后通過遍歷剩下的沒有排序過的元素來找到真正的最小值;
檢查是否 15 小于現在的最小值 (20)。是,將 15 設為新的最小值;
檢查是否 30 小于現在的最小值 (15)。否,15仍然是最小值;
檢查是否 12小于現在的最小值 (15)。是,將 12 設為新的最小值;
交換最小的元素 (12) 和第一個沒有排序過的元素 (20);
數組排序順序更新為 10 12 15 30 20。
避免視覺疲勞,圖文只說明前面2輪循環,下面的3輪循環大家自己思考和理解。
2. 選擇排序法全流程
3. 選擇排序法總結
每一輪進行跨元素比較
每一輪循環比較都會產生當前最小值(當前最小值:這一輪下來的最小值)
每一輪循環比較后就會少一個元素進行比較(因為每結束一輪就會產生一個當前最小值)
三、插入排序法(直接插入)
插入排序是基于互相比較的排序。所謂的“比較”,就是通過比較數組中的元素,看誰大誰小,根據結果對應調整元素的位置。
1. 插入排序法基本思路
初始時先默認將第一個元素標記為已排序
然后提取第一個沒有排序過的元素,找出插入提取元素的地方并和已經排序過的元素進行比較。
比較大小若條件成立,則將已排序過的元素往右移1個單位,如果條件不成立,則在現有位置直接插入。
以此類推,直到所有元素均排序完畢
還以[20,10,15,30,12]這個數組舉例
將第一個元素 (20) 標記為已經排序過;
提取第一個沒有排序過的元素 (10);
找出插入提取元素的地方;和已經排序過的元素 20 比較;
20 大于 10 成立, 則將現在已經排序過的元素20向右移動1格;
在數組的最開始(沒有東西可以比較),則在現有位置上插入元素。
提取第一個沒有排序過的元素 (15);
找出插入提取元素的地方;和已經排序過的元素 20 比較;
20 大于 15 成立, 則將現在已經排序過的元素20 向右移動1格;
10 大于 15 不成立, 在現有位置上插入一個元素;
提取第一個沒有排序過的元素 (30);
找出插入提取元素的地方;和已經排序過的元素 20 比較。
20 大于 30 不成立, 在現有位置上插入一個元素;
提取第一個沒有排序過的元素 (12)。
……..
避免篇幅過大導致視覺疲勞,下面幾步大家進行自我思考和理解。
2. 插入排序法全流程
3. 插入排序法總結
由“有序組”和“待插入組”組成
每一輪都有一個待插入對象(可以接收實時數據進行排序)直到“待插入組元素為0”
除了以上三種排序算法,還有許多不同的排序算法,每個都有其自身的優點和使用場景,當然也有局限性。可以多看幾遍全流程動態圖弄清來龍去脈,理解性地記憶,希望對你有用。
自流量競爭升級到平臺競爭開始,小程序也成為互聯網巨頭戰略布局的重點。在此背景下,各具特色的小程序開始出現。11月25日,百度披露智能小程序月活..
網站作為企業在互聯網上最直觀的展示名片,已經被越來越多的企業接受和推廣。就連眾多傳統企業、政府機關、事業單位等,也一并被時代的浪潮沖到了線..
隨著智能手機、ipad等智能移動設備的普及,推動了網站風格樣式的更新迭代。為解決PC端和移動端不同訪客的用戶體驗問題,眾多的建站產品供應商分別提..
輸入您的電話號碼,點擊通話,稍后您將接到我們的電話,該通話對您 完全免費 ,請放心接聽!
恭喜您!
抽到 競網建站
發出的紅包