• 希尔排序


    public class ShellSort {
    
    	public static void main(String[] args) {
    		int[] arr = new int[] {9,8,7,6,5,4,3,2,1,0};
    		shellSort(arr);
    		System.out.println(Arrays.toString(arr));
    	}
    	
    	/**
    	 * 1.分组有什么用?
    	 * 	可以提前调整数据的位置,减少后面移动的次数。
    	 * 2.为什么缩小增量进行分组排序,最后数组就有序了?
    	 * 	不管初始增量为多少,最后都会变成1,进行一次完整的插入排序,所以最后整个数组有序。
    	 */
    	public static void shellSort(int[] arr) {
    		for(int gap = arr.length / 2; gap > 0; gap /= 2) {
    			for(int i = 1; i < arr.length; i++) {
    				//当i < gap时,没有交换的对象
    				if(i >= gap) {
    					int insertVal = arr[i];
    					int insertIndex = i - gap;
    					while(insertIndex >= 0 && arr[insertIndex] > insertVal) {
    						arr[insertIndex+gap] = arr[insertIndex];//后移gap个单位
    						insertIndex -= gap;
    					}
    					arr[insertIndex+gap] = insertVal;
    				}
    			}
    		}
    	}
    	
    }
    

      

  • 相关阅读:
    mailing list的原理
    关于结构体的使用
    c++ template
    IDA逆向
    重定向 301 302
    linux信号
    cmake编译选项
    mongodb超时
    普通java工程的resources目录寻址
    Vue基础---->VueJS的使用(二)
  • 原文地址:https://www.cnblogs.com/noyouth/p/12167701.html
Copyright © 2020-2023  润新知