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

    希尔排序

    基本思想:分组的直接插入排序,是不稳定排序算法
    描述:

    1. 将一个数据序列分成若干组,每组由若干相隔一段距离的元素组成,这段距离称为增量,在一个组内采用直接插入排序算法进行排序;
    2. 增量的初值一般为数据序列长度的一半,以后每趟增量逐渐减小,最后为1,当增量为1时,只有一组,元素是整个序列,在进行一趟直接插入排序即可。

    代码

    	public static void shellSort(int[] table) {
    		for(int delta=table.length/2;delta>0;delta/=2){//控制增量减半
    			for(int i =delta;i<table.length;i++){//
    				int temp = table[i],j;
    				for(j =i- delta;j>=0&&temp<table[j];j-=delta){
    					table[j+delta] = table[j];
    				}
    				table[j+delta] = temp;
    			}
    			for(int k=0;k<table.length;k++){
    				System.out.print(table[k]+ " ");
    			}
    			System.out.println("");
    		}
    	}
    

    三层循环

    1. 最外层:以增量delta变化来控制进行若干趟扫描,delta的初值为序列长度的一半,以后逐渐减半,直至为1
    2. 中间循环:进行一趟扫描,序列分为delta组,每组元素进行直接插入排序
    3. 最内层循环:每组元素相距delta远,寻找插入位置

    时间复杂度:平均:o(nlogn)~o(n^2)
    最好:o(n1.3),最坏:o(n2)
    空间复杂度:o(1)

    作者:starryfeiii
    出处:http://www.cnblogs.com/feiii/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,原文链接否则保留追究法律责任的权利。
  • 相关阅读:
    DI的3种实现方式
    spring ioc的实现方式
    异常:This application has no explicit mapping for /error, so you are seeing this as a fallback.
    maven项目 集成SSM框架
    org.xml.sax.SAXParseException错误
    Redis在web中的应用
    上传下载文件实例(vsftp服务器+nginx)
    Redis的安装与启动
    修饰器-2
    修饰器练习
  • 原文地址:https://www.cnblogs.com/feiii/p/6424520.html
Copyright © 2011-2022 走看看