希尔排序--O(N^2) --- 不稳定

希尔排序是插入排序的一种,它是针对直接插入排序算法改进而来的。

基本思想

  1. 把记录按步长gap分组,对每组记录采用直接插入排序方法进行排序;
  2. 随着步长逐渐减小,所分成的组包含的记录越来越多;
    当步长值减小到1时,整个数据合成一组,构成一组有序记录,完成排序;

动态图

代码

public class ShellSort {
     
	public static void main(String[] args) {
     
		int[] array = {
     3,5,1,2,4,6,8,10,9};
		sort(array);
	}
	
	public static void  sort(int[] array){
     
		//1.定义一个用于进行交换的中间变量
		int temp = 0;
		//2.定义一个用于记录是希尔排序的第几轮排序
		int count = 0;
		//3.开始进行希尔排序 ,初始步长为数组长度的一半,每一次步长减半
		for(int gap = array.length / 2;gap > 0;gap /= 2) {
     
			//
			for(int i = gap;i < array.length;i++) {
     
				//遍历各组中的所有元素(共 gap组),步长gap
				for(int j = i - gap;j >= 0; j-=gap) {
     
					//如果当前元素大于 加上步长之后的那个元素,则进行交换
					if(array[j] > array[j+gap]) {
     
						temp = array[j];
						array[j] = array[j+gap];
						array[j+gap] = temp;
					}
				}
			}
			
			System.out.println("希尔排序的第"+(++count)+"轮排序的结果是:"+Arrays.toString(array));
		}
			
	}

}

你可能感兴趣的:(java数据结构,算法,排序算法,java,数据结构,插入排序)