zoukankan      html  css  js  c++  java
  • 排序算法之希尔排序

    概念

    将相距某个‘增量’的记录组成一个子序列,分别对其进行直接插入排序,直到‘增量’为1.

    Java版实现

    	public static void shell(Integer[] array) {
    		
    		int increment = array.length; 
    		do {
    			increment = increment/3+1;
    			for (int i = increment; i < array.length; i++) {
    				Integer temp = array[i];
    				int j;
    				// loop to do the direct insert sorting
    				// loop at most length/increment times
    				for (j = i-increment; j >= 0 && array[j] > temp; j-=increment)
    					array[j+increment] = array[j];
    				array[j+increment] = temp;
    			} // end for loop length-increment times
    		} // decrease the increment
    		while (increment > 1);
    	}
    

    取相隔某增量的值作为一个序列,分别对其进行直接插入排序

    时间复杂度分析

    希尔排序中影响其时间复杂度的关键是‘增量’的选取,选取合适的增量,会使得排序的效率提高。

    大量研究表明,当增量序列为dlta[k]=2t-k+1-1(0<=k<=t<=log2(n+1))时,可以获得不错的效率,其时间复杂度为O(n3/2)

    希尔排序是个不稳定的排序

    空间复杂度分析

    所用辅助空间为O(1)

  • 相关阅读:
    spring core与context的理解
    maven项目中pom.xml快速生成
    MariaDB常用命令
    MariaDB快速入门指南
    My_plan_51
    Oracle简介及安装
    Oracle单行函数
    oracle多表查询
    单点登录原理与简单实现
    JavaScript 的时间消耗
  • 原文地址:https://www.cnblogs.com/scarlettxu/p/3491659.html
Copyright © 2011-2022 走看看