排序演算法複習筆記

2021-10-07 18:56:30 字數 2150 閱讀 9774

排序演算法一般都會有幾個較為基礎通用的方法,如下表

方法名作用

issorted()

判斷陣列是否有序

less(int item1, int item2)

比較第乙個引數是否小於等於第二個引數

exch(int a, int b)

交換這兩個索引位置的元素

show()

列印陣列

sort()

具體待實現的排序演算法

具體參考如下

public

abstract

class

sort

public

boolean

issorted()

return

true;}

public

boolean

less

(int item1,

int item2)

public

void

exch

(int a,

int b)

}public

void

show()

public

abstract

void

sort()

;}

之前是用泛型來做的,後考慮學習演算法主要的是理解邏輯,所以使用簡單的int簡單而且更直觀

1 選擇排序

主要過程是:首先找到陣列中最小的那個元素,其次,將它和陣列中低乙個元素交換位置(若最小的元素是自己,則與自己交換一次)。然後在剩下的元素中依次找出最小的元素,與第二個位置的元素做交換。以此類推,直到排序到最後乙個元素,則完成整個陣列的排序。

最大的特點是,執行時間與輸入無關,且資料移動是最少的。對於長度是n的陣列,選擇排序需要大約n²/2次比較和n次交換。

class

choiceshort

extends

sort

@override

public

void

sort()

exch

(i, min);}

}}

2 插入排序

從第二個元素開始,依次從右往左比較,遇到比當前元素大的則交換位置,反之則為已經插入到了當前元素對應的位置,然後選取下乙個元素開始下一輪的比較。

class

insertshort

extends

sort

@override

public

void

sort()

}}}

因為每個元素向前尋找對應的位置時都經歷了多次比較以及交換,所以可以在內迴圈中先找到對應應該插入的位置,然後之間的元素都做乙個向後移動即可。

@override

public

void

sort()

//最後把item插入到對應的位置

mlist[pos]

= item;

}}

插入排序適合情況:

陣列中每個元素距離它的最終位置都不遠

乙個有序的大陣列接乙個小陣列

陣列中只有幾個元素的位置不正確

當倒置的數量很少時,插入排序很可能是最快的演算法,總的來說插入排序適合部分有序的陣列,也很適合小規模的陣列,往往用於高階排序中分為小規模部分的排序。

3 希爾排序

因為在大規模亂序陣列的插入排序很慢,因為它只會交換相鄰的元素,所以希爾排序是在這個基礎上進行的改進,使陣列中任意間隔為h的元素都是有序的。意思為h個間隔為h的有序陣列編制在一起組成的乙個陣列,進行排序時移動的距離和h的大小有關,也為更小的h有序創造方便。希爾排序更高效的原因是因為它權衡了子陣列的規模和有序性。排序之初,各個子陣列都很短,排序只會子陣列都是部分有序的,這兩種情況都很適合插入排序。子陣列部分有序的程度取決於遞增序列的選擇,透徹理解希爾排序的效能在今天也是一項挑戰。

class

shellshort

extends

sort

@override

public

void

sort()

} h = h /3;

}}}

演算法複習筆記 排序演算法比較

最近正好複習複習演算法,於是從排序演算法開始做乙個總結。以下的 均為原創,如果有任何問題,歡迎指正。簡單來講,排序演算法的實質是將長度為n的陣列中的數字按照從小到大或者從大到小的順利排列。簡而言之,在不考慮演算法的情況下,我們可以把排序抽象為如下的乙個函式 array表示t型別的乙個陣列,num表示...

排序演算法複習

參考自 直接插入排序 從小到大排列 n個資料,第乙個資料平凡有序 假設前i 1個資料串有序,根據第i個的大小將第i個插入到此串中,則前i個的資料串也有序。因此可得到n個資料有序。插入方法 待插入元素為第i元素,數值存為temp,將 i 之前的元素 j 從第 i 1 元素開始與之比較 如果比temp大...

演算法複習 排序

排序中主要有插入排序 氣泡排序 歸併排序 快速排序等 主要從空間消耗 時間複雜度 最差時間複雜度等方面考慮演算法的好處 1.插入排序 插入排序是一種簡單直觀的排序演算法。它的工作原理非常類似於我們抓撲克牌 對於未排序資料 右手抓到的牌 在已排序序列 左手已經排好序的手牌 中從後向前掃瞄,找到相應位置...