java中排序演算法

2021-09-01 07:28:00 字數 1546 閱讀 4568

常用的排序演算法有以下幾類:插入排序(直接插入排序,希爾排序),選擇排序(簡單選擇排序,堆排序),交換排序(氣泡排序,快速排序),歸併排序,基數排序。排序方法選擇得當與否直接影響程式執行的速度和輔助儲存空間的占有量,進而影響整個軟體的效能。 下面對這些演算法一一的介紹他們究竟是怎麼排的。

插入排序:

直接插入排序:插入到已經排好序的數列中的乙個資料。舉乙個形象的例子:在乙個排好隊打飯的對列中,張三是後來了,直接插到了佇列中李四的後邊,因為張三和李四是哥們兒。

希爾排序:將所有的資料分組,小組內進行排序,之後重新分組,組內資料增多,重新排序(每個步驟都使用直接插入排序)。舉乙個形象的例子:還是排隊打飯,學校有好多班級,不能所有班級都一起打,先按班級(分組)排好隊,最後所有的班級再組成乙個大組,再乙個乙個的排著打飯。

選擇排序:

簡單選擇排序:每次對剩餘的資料中選擇最小的和剩餘的這些資料中的第乙個進行交換。舉個例子:畢業了,大家都在照畢業照,大家站在那裡參差不齊,照相師傅一看,這可不行啊,瞅了一眼一下看到了最高的,好了,你就站到第乙個,接著瞅剩下最高的,站第二個……最後就成了乙個由高到低的佇列

堆排序:堆分為大頂堆(父節點大於子節點)和小頂堆(父節點小於子節點),根節點是最大的節點(或者最小的節點),每次挑出根節點之後,將剩餘的節點進行重新建堆。

交換排序:

氣泡排序: 從後到前(或者從前到後)相鄰的兩個兩兩進行比較,不滿足要求就位置進行交換,一輪下來選擇出乙個最小(或最大)的放到了第乙個位置上(或最後位置),之 後不考慮選出的元素,對剩餘的元素進行迴圈的排列。再舉乙個例子:我們在火車站買票有軍人、記者、***表優先的原則,大家排隊買票,這時來了乙個*** 表買票,他從後往前問買票的人是否是軍人、記者、***表,如果不是就和普通老百姓交換位置

快速排序 :選 出乙個關鍵字,比他小的放到他的左邊,大的放到右邊,設定兩個指標,同時與關鍵字進行比較。舉個例子:期末考試到了,考試完了我們要把成績排序,我們先選 60為幾個分數,大於等於60分的排到一邊,小於60分的排到另一邊,之後對小於60分的同學和大於60分的同學進行同樣的排序。

歸併排序:

歸併排序就是相鄰兩個元素組成乙個組,組內進行排序,之後再將組內元素增加,迴圈比較

基數排序:

基數排序就是先對各位進行比較,進行排序,再對十位進行比較,進行排序……最後對最高位進行比較,進行排序。舉個例子:每年在大學裡我們都要進行評優,什麼樣的學生是最優的學生?各方面都要進行比較——成績、人品、道德等

最後我們來總結一下各類排序演算法的時間複雜度和空間複雜度,並進行對比:

8中排序演算法java實現

1.package sort 氣泡排序思想 自上而下,相鄰的兩個比較,小的向前,大的向後 author 2000105959 public class sortmp int temp for int i 0 ia j 1 for int i 0 i list low list high list l...

C語言中排序演算法

選擇排序 拿到其中乙個元素的值依次和其他元素進行比較,完全比較完一次之後,最大或者最小的值出現在第0位.氣泡排序 用兩個相鄰的元素進行比較,每完全比較完依次,最大或者最小的值出現在末尾.例 intnums 5 int length sizeof nums sizeof nums 0 for int ...

資料結構中排序演算法之選擇排序演算法

對於選擇排序,它的時間複雜度為o n 2 空間複雜度為o 1 它的具體思想為 對於需要進行排序的陣列a,我們在每一趟排序中找到陣列中最小或者最大的元素,記其為a j 然後將其與每一趟排序時未排好序部分的第乙個元素進行交換,以此類推,直到陣列a中元素全部有序排列。在這裡,在每一趟排序查詢陣列中最小或最...