奔走在演算法的大路上(一)排序之希爾排序

2021-06-29 16:11:56 字數 1199 閱讀 8294

希爾排序是插入排序的一種更高效的改進版本。它的作法不是每次乙個元素挨乙個元素的比較。而是初期選用大跨步(增量較大)間隔比較,使記錄跳躍式接近它的排序位置;然後增量縮小;最後增量為 1 ,這樣記錄移動次數大大減少,提高了排序效率。希爾排序對增量序列的選擇沒有嚴格規定。

希爾排序最關鍵的是選對增量,關於增量的選擇,建議參考:希爾排序  中的步長序列。

希爾排序的核心思想是:由一定規則將帶排序的長序列切割成多個子串行,子串行進行內部插入排序,如此迴圈。這個規則就是增量。

package sort;

public class shellsort

/*** * 交換函式

* * @author zhangjunshuai

* @date 2023年4月3日 下午4:14:32

* @param a

* @param i

* @param j

*/private static void exch(comparable a,int i ,int j)

/*** * 列印輸出

* * @author zhangjunshuai

* @date 2023年4月3日 下午4:19:03

* @param a

*/private static void show(comparable a)

system.out.println(); }

/*** * 希爾排序

* * @author zhangjunshuai

* @date 2023年4月8日 下午8:51:28

* @param a

*/private static void shell(comparable a)}}

system.out.println("--------------增量:"+n);

show(a);

n =n/2;

} }public static void main(string args) ;

shell(a); }

}

結果:

第一遍內部對比的組合是(顏色相同的組合)

第二遍內部對比的組合是(顏色相同的組合)

第三遍是對相鄰的進行插入的排序

參考:

演算法(一)排序

一 o n 2 的排序演算法 1.選擇排序 selection sort 先找到最小的 public static void selectsort int arr 2.氣泡排序 bubble sort 先找到最大的 public static void bubblesort int arr 3.插入...

演算法(一) 排序sorting

問題 輸入數字a1,a2,a3.an,使其公升序輸出。1 插入排序 insertion sort 演算法 這個演算法從陣列的第二個元素開始迴圈,將選中的元素與之前的元素一一比較,如果選中的元素小於之前的元素,則將之前的元素後移,最後再將選中的元素放在合適的位置。在這個演算法執行的過程中,總是保持著索...

演算法入門(一)排序之桶排序

當我們需要對一組資料 無序 進行排序時,假設期末考試完了,老師要按照分數對大家的名次進行排序,這裡假設五個同學分別考了 5分 3分 5分 2分 8分 滿分十分 當然,我們一下子就看出了其中的奧妙,但是我們用程式該怎麼寫呢?我們可以建立乙個大小為11的陣列 因為這裡統計的是0到10之間的數字出現次數 ...