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];
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章