Java中的排序演算法學習

2021-09-13 10:51:34 字數 1938 閱讀 9245

二、選擇排序

三、插入排序

四、快速排序

五、比較

接下來利用這些排序演算法對乙個陣列進行公升序,即由小到大的排序。

比較相鄰的元素,如果前面的元素比後面的大,則交換這兩個元素

定位到下一對相鄰元素,重複第一條規則

重複1,2,經過n-1輪完成排序,每輪進行n-1次比較,總計n(n-1)/2次比較,最多交換n(n-1)/2次

這樣,每比較一次相鄰元素,都會將較小的放前面,較大的放到後面,於是,就會先將最大的排到後面。

來看看這張**

如上圖所示,可以很容易看出每次比較都會將大的放到後面,於是整個排序是先將最大的放在最後面,接著次大的放在倒數第二個,以此類推。知道其原理後再編寫**就很方便了。

for(int i=0;iarr[j+1]) 

}}

將陣列中每個元素與第乙個元素比較,如果這個元素小於第乙個元素,則交換這兩個元素

迴圈第 1 條規則,找出最小元素,放於第 1 個位置

經過 n-1 輪比較完成排序,每輪進行n-1次比較,總計n(n-1)/2次比較,最多交換n(n-1)/2次

繼續看這張**

在每一輪排序中,為了找到最小元素(紅色位置),需要記錄它的下標,每一次比較時,最小元素對應的下標都可能會隨之發生變化。最小元素對應的下標設為minindex,經過第一輪比較後,最小元素為arr[minindex],我們需要將最小元素放到第乙個元素的位置上,但需要注意第乙個位置的元素需要保留,於是可以直接將最小元素與第乙個元素互換。第二輪即第二輪的最小元素(第一輪的最小元素已不在內),與第二個元素互換…以此類推

for(int i=0;i可以看出,選擇排序與氣泡排序的原理不同,但是最終的結果也是一樣地通過元素的交換來完成的,並且交換的最大次數也是(n-1)n/2次。

將陣列分為兩部分, 將後部分的第乙個元素逐一與前部分每乙個元素比較,在合理位置插入

從第乙個元素開始,該元素可以認為已經被排序

取出下乙個元素,在已經排序的元素序列中從後向前掃瞄

如果該元素(已排序)大於新元素,將該元素移到下一位置

重複步驟3,直到找到已排序的元素小於或者等於新元素的位置

將新元素插入到該位置後

重複步驟2~5。

可能很多人會卡在插入排序這個地方上,不懂為什麼元素往後面移動就排序好了,我也是花了一段時間才逐漸理解的。

首先第一輪,前部分為第乙個元素,我們可以認為這個元素是已經排序好了的,後部分即剩下的元素。首先把後部分的第乙個拿出來,於是後部分的第乙個元素的位置就有了空,需要將前面的部分元素往後挪一挪,然後看哪個位置的前邊小於拿出來的後邊也大於拿出來的,那之前拿出來的元素就需要插入這個位置,即這個位置到前後分界線間的元素都需要往後挪一挪。在**邏輯中,可以考慮在迴圈中進行元素後移操作,設定元素停止後移的條件。(哎呀我好像說不明白)

不說廢話了,感覺真的說不明白,看**看**。

for(int i=1;i=0;j--)

}} end=system.currenttimemillis();

//選擇排序:每一次找到最小的元素,放在最前面

start=system.currenttimemillis();

for(int i=0;i=0;j--) {

if(arr3[j]顯示結果如下所示:(單位:ms)

顯然,當資料量較大時,快速排序所花的時間遠遠小於其他三種排序方法。

氣泡排序花的時間好久好久好久噢~~

演算法學習之排序 選擇排序(Java)

public class selectsort int temp array i array i array leastindex array leastindex temp public static void main string args select array for int a 0 a...

演算法學習 插入排序 Java

插入排序是演算法入門的基礎演算法之一,它的原理類似於撲克牌插入的過程。1 從第二個位置逐個與前面元素進行比較 2 逐步替換position位置 3 直到找到比當前元素小的元素,將當前元素放到position位置上 具體 過程 public class insertsort insertsort ar...

排序演算法學習

一直都想把排序和搜尋類的演算法總結一下,一直拖著沒寫,主要是太懶了,現在決定還是要再好好學習下這些基本的演算法。畢竟基礎真的是很重要。好了現在開始學習第乙個排序演算法 插入排序 我記得插入排序在我們以前的資料結構教程上是第乙個介紹的 插入排序 聽這個排序名字就是將乙個什麼數要插入到某個地方,不錯,他...