排序算法常用的有冒泡排序,選擇排序和插入排序,下面將用java語言實現這三種排序方式,并且介紹一種由插入排序拓展出來的希爾排序。
1、冒泡排序(bubblesort)是一種最簡單的排序算法。它的基本思想是迭代地對輸入序列的第一個元素到最后一個元素進行倆倆比較,當滿足條件時交換這倆個元素的位置,該過程持續到不需要執行上述過程的條件時。
2、我們自定義一個排序的函數為sorter(int[]array);
1
|
private static void sorter( int [] array) for ( int i= 0 ;i<array.length- 1 ;i++) { for ( int j= 0 ;j<array.length-i- 1 ;j++) { if (array[j]>array[j+ 1 ]) { int temp = array[j]; array[j] = array[j+ 1 ]; array[j+ 1 ] = temp; } } } } |
完整代碼如下圖:
3、運行結果如下:
1、選擇排序
選擇排序(selectsort)是一種原地(in-place)排序算法,適用于小文件。選擇排序是基于鍵值并且交換是發生在需要交換時才執行,所以選擇排序常用于數值較大和鍵值較小文件。
2、
1
|
private static void sorter( int [] array) for ( int i= 0 ;i<array.length- 1 ;i++) { int index = i; for ( int j=index;j<array.length- 1 ;j++) { if (array[index]>array[j+ 1 ]) { index = j+ 1 ; } } int temp = array[index]; array[index] = array[i]; array[i] = temp; } } |
3、運行結果
1、插入排序
插入排序(insertionsort)是一種簡單且有效的比較排序算法,在每次迭代過程中算法隨機的從輸入序列中移除一個元素,并將該元素插入到排序序列中正確的位置,重復該過程,知道所有元素都被選擇一次。
2、
1
|
private static void sorter( int [] array) for ( int i= 1 ;i<array.length;i++) { int temp = array[i]; int j = i; while (j> 0 &&temp<array[j- 1 ]) { array[j] = array[j- 1 ]; j--; } array[j] = temp; } } |
3、運行結果
1、希爾排序
希爾排序(shellsort)又稱縮小增量排序,該算法是一個泛化的插入排序。
2、
1
|
public static void sorter( int []array) { for ( int gap=array.length/ 2 ;gap> 0 ;gap/= 2 ) { for ( int i=gap;i<array.length;i++) { int temp = array[i]; int j = i; if (array[j]<array[j- 1 ]) { while (j-gap>= 0 &&temp<array[j-gap]) { array[j] = array[j-gap]; j-=gap; } array[j] = temp; } } } } |
3、運行結果