常用演算法原理及實現(Java)

2021-08-16 01:45:41 字數 2247 閱讀 3756

比較兩個相鄰的元素,將值大的元素交換至右端。

依次比較相鄰的兩個數,每一次將小數放在前面,大數放在後面。如在第一趟:首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放在前,大數放在後,如此迴圈,直至比較最後兩個數,將小數放在前,大數放在後。重複第一趟步驟,直至全部排序完成。

例如存在待排序陣列 int a = ;

第一趟排序:

第一次:比較a[0]和a[1],交換a[0]和a[1],排序後結果為:a=

第二次:比較a[1]和a[2],交換a[1]和a[2],排序後結果為:a=

第三次:比較a[2]和a[3],不用交換,排序結果為:a=

第四次:比較a[3]和a[4],交換a[3]和a[4],排序結果為:a=

第二趟排序:

第一次:比較a[0]和a[1],交換a[0]和a[1],排序後結果為:a=

第二次:比較a[1]和a[2],不用交換,排序後結果為:a=

第三次:比較a[2]和a[3],交換a[2]和a[3],排序結果為:a=

第四次:比較a[3]和a[4],不用交換,排序結果為:a=

第三趟排序:

第一次:比較a[0]和a[1],不用交換,排序後結果為:a=

第二次:比較a[1]和a[2],交換a[1]和a[2],排序後結果為:a=

第三次:比較a[2]和a[3],不用交換,排序結果為:a=

第四次:比較a[3]和a[4],不用交換,排序結果為:a=

第四躺排序:

第一次:比較a[0]和a[1],交換a[0]和a[1],排序結果為:a=

第二次:比較a[1]和a[2],不用交換,排序後結果為:a=

第三次:比較a[2]和a[3],不用交換,排序結果為:a=

第四次:比較a[3]和a[4],不用交換,排序結果為:a=

根據以上可以看出長度為5的陣列在進行4趟排序後就已經將陣列的順序整理出來了,還可以看出每趟中只需要比較(5-趟數)次就可以得出排序,歸納出當長度為n的數則進行氣泡排序的時候共需要比較

n-1趟,每趟比較

n-i次,i為比較趟數。

因此用for迴圈控制整個演算法時,可以用兩層for迴圈,外層控制比較趟數,內層控制每趟比較的次數。

public static void bubblesort(int a)

}} }

每一趟從待排序的記錄中選出最小的元素,順序放在已排好序的序列最後,直到全部記錄排序完畢。也就是:每一趟在

n-i+1(i=1,2

,…n-1)

個記錄中選取關鍵字最小的記錄作為有序序列中第

i個記錄。

給定陣列:int arr=;第

1趟排序,在待排序資料arr[1]~arr[n]

中選出最小的

資料,將它與arrr[1]

交換;第

2趟,在待排序

資料arr[2]~arr[n]

中選出最小的

資料,將它與

r[2]

交換;以此類推,第

i趟在待排序

資料arr[i]~arr[n]

中選出最小的

資料,將它與

r[i]

交換,直到全部排序完成。選擇排序的時間複雜度為o(n^2)。

**實現:

public static void selectsort(int a)				

}if(minindex != i)

}}

乙個已經有序的資料序列,要求在這個已經排好的資料序列中插入乙個數,但要求插入後此資料序列仍然有序。

每步將乙個待排序的記錄,按其關鍵碼值的大小插入前面已經排序的檔案中適當位置上,直到全部插入完為止。

如有以下序列int a =

我們先將第乙個位置的數就是5看成是已經排序後的元素,故從第二個位置3開始插入排序

第一次:將索引為1即值為3看作要插入的元素,3去尋找自己應該插入的位置,將3和5比較發現3比5小,故交換3和5的位置,排序後為:

第二次:將索引為2即值為1看作要插入的元素,1去尋找自己的要插入的位置,先將1和前乙個位置就是5比較,發現1比5小,待插入位置的索引減1,這時它還沒有比較完,繼續向前搜尋和3比較,交換1和3的位置排序後的結果為

**實現

public static void insertsort(int  a)

a[j] = tobeinserted;

} }

排序演算法 選擇排序原理及Java實現

選擇排序是一種簡單直觀的排序演算法,其基本原理如下 對於給定的一組記錄,經過第一輪比較後得到最小的記錄,然後將該記錄的位置與第乙個記錄的位置交換 接著對不包括第乙個記錄以外的其他記錄進行第二次比較,得到最小記錄並與第二個位置記錄交換 重複該過程,知道進行比較的記錄只剩下乙個為止。從簡單選擇排序的過程...

排序演算法 希爾排序原理及Java實現

希爾排序也成為 縮小增量排序 其基本原理是,現將待排序的陣列元素分成多個子串行,使得每個子串行的元素個數相對較少,然後對各個子串行分別進行直接插入排序,待整個待排序列 基本有序 後,最後在對所有元素進行一次直接插入排序。因此,我們要採用跳躍分割的策略 將相距某個 增量 的記錄組成乙個子串行,這樣才能...

排序演算法 快速排序原理及Java實現

和以前的寫法對比,基準值所在的位置沒必要每次都進行交換,只在一次快排完成後,重新把當前的基準值賦值給現在的index位置就好了。寫的很強,感謝作者 public class quicksort i low j hight index a i 用子表的第乙個記錄做基準 while i j a i in...