考慮到各種排序方法的復雜運算有時候難以理解,以致于帶來的記憶困難,將其轉化為更方便自己理解的思路方式,并作出以下的記錄。
冒泡排序:
把數組中的數依次將相鄰的兩個數進行對比,把較大的數排列在右邊,最后把最大的數排在了數組最右邊,完成第一輪對比;忽略最大的數進行第二輪相同的對比步驟,把第二大的數排在倒數第二位,如此類推,最多經過(數組總長度-1)次排序,完成整個數組的從小到大排列。
選擇排序:
指定一個位置(通常是最左或最右),依次將數組中的數兩兩進行對比,把其中較小(或較大)的數進行標記,再將被標記的數與下一個數進行對比,直到對比出整個數組中最小(或最大)的數后,將其放到指定的位置,完成第一個數的排序;將數組中剩下的數重復進行相同的對比方法,找出第二個最小(或最大)的數,將其放到第一個指定位置的后面,以此類推,直到最后完成整個數組的從小到大(或從大到小)的排序。
插入排序:
對比數組中的前兩個數,將較大的數排列在右邊;加入第三個數與前面兩個數進行對比,當第三個數遇到比自身大的數時,移動到較大數的左邊,直到遇到比自己小的數時停止移動并插入到其中或直到移動到最左邊為止(即自身為三個對比數中最小的數)。加入第四個數,以同樣的方法進行對比插入,直到完成整個數組的移動插入,即可完成整個數組的從小到大排序。(從大到到的排序方法類同)
歸并排序:
這個算法有點抽象。將整個數組拆分成兩部分,再將拆分好兩個部分分別再拆開成四、八、十六....一直拆到最小的對比單位:每部分只剩下兩個對比數為止(如果是奇數位數組時最后一組只有一個數);(假設最小單位組為n,包含最少的兩個數或一個數,往上一級包含兩組共4個數的則為2n單位組,以此類推4n、8n...)開始進行對比,將每個n組自身的兩個數進行對比,并將其中較大的數放置該組的右邊;往上一級,將2n組的兩組n的數進行對比,第一組第一個數與第二組的第一個數進行對比,較小的數排列在新的2n組序列的第一位;剩下的較大數與之前較小數所在組的下一個數進行對比,其中較小的排列在新的2n組的第二位,以此類推完成每個2n組的從小到大排序;繼續往上,完成4n、8n......單位組的排序,一直到完成整個數組的從小到大排序。(從大到小的方法類同)
快速排序:
這是一種“自私”排序法,選定數組的第一個數為基數,與整個數組的其他數進行對比,將所有比這個基數小的數(假設為組n)移動到其左邊,于是第一個基數在整個數組中的正確排序就完成了;選擇n中的第一個數作為第二個基數與n剩下的其他數進行對比,所有比這個數小的(假設為2n)都移到到其左邊,第二個基數在數組整體中的位置排序完成;以此類推將2n中的第一個數作為第三個基數與2n中其他數進行對比,比基數小的都移動到其左邊....完成所有基數的左邊數(即比基數小的數)的排序后,倒回來開始從最后一個基數對比基數的右邊數(即比基數大的數),以相同的方法完成所有右邊數的排序;最終完成整個數組的從小到大排序。
隨機化快速排序:
隨機化快速排序與快速排序基本一致,其中的區別在于:在選擇下一個基數時,并不以n組的第一個數作為第二個基數,而是在整個數組中隨機選擇一個作為第二個基數進行對比,這種做法可以避免了在快速排序中,每次都選中僅比上一個基數大一點的數作為第二個基數,導致整體對比排序的次數過多,最多的對比次數即出現了快速排序中最慢最差的排序效率。隨機化快速排序并不一定每次都是最快的,但卻避免了最慢效率的情況出現。
限于自身的理解程度,可能描述總結得不夠清晰,只能在之后加深理解后更改或補充。