java - 希爾排序

希爾排序

排序原理

希爾排序又稱縮小增量排序

基本思想:先將原表按增量 ht分組,每個子文件按照直接插入法排序。同樣,用下一個增量ht/2將文件再分爲子文件,再直接插入法排序。直到ht=1時整個文件排好序

關鍵:選擇合適的增量
希爾排序算法可以通過三重循環來實現

package sort;

import java.util.Arrays;

//希爾排序也是一種插入排序,它是簡單插入排序經過改進之後的一個更高效的版本,也稱爲縮小增量排序
public class ShellSort {

	public static void main(String[] args) {
		int[] arr = new int[] {5,4,2,7,9,-1,8,2};
		shellSort(arr);
		System.out.println(Arrays.toString(arr));
	}

	
	public static void shellSort(int[] arr) {
		// 設置增量h,並逐步縮小增量
		for (int h = arr.length / 2; h > 0; h /= 2) {
			// 從第h個元素,逐個對其所在組進行直接插入排序操作
			for (int i = h; i < arr.length; i++) {
				for(int j=i;j>h-1;j-=h){
					if(arr[j] < arr[j-h]){
						swap(arr,j,j-1);
					}
				}
			}
		}
	}

	//交換數組元素
	private static void swap(int[] arr,int a,int b){
		arr[a] = arr[a] + arr[b];
		arr[b] = arr[a] - arr[b];
		arr[a] = arr[a] - arr[b];
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章