zoukankan      html  css  js  c++  java
  • 希尔排序算法Java实现

    希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进。该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。

    希尔排序实质上是一种分组插入方法。它的基本思想是:对于n个待排序的数列,取一个小于n的整数gap(gap被称为步长)将待排序元素分成若干个组子序列,所有距离为gap的倍数的记录放在同一个组中;然后,对各组内的元素进行直接插入排序。 这一趟排序完成之后,每一个组的元素都是有序的。然后减小gap的值,并重复执行上述的分组和排序。重复这样的操作,当gap=1时,整个数列就是有序的。

      

    package com.neuedu.algorithm;
    
    import java.util.Arrays;
    
    public class ShellSort {
    //先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,
    //然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,
    	//再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),
       public	static void Shell(int Array[],int n){
    		int d=n/2;                   //设置起始增量
    		while(d >= 1)
    		{               //增量为1时排序结束
    			for(int k=0;k<d;k++)
    			{    //遍历所有的子序
    				for(int i=k+d;i<n;i+=d)
    				{  //对每个子序进行插入排序
    					int temp=Array[i];   //插入排序算法参见链接
    					int j=i-d;
    					while(j>=k && Array[j]>temp)
    					{
    						Array[j+d]=Array[j];
    						j=j-d;
    					}
    					Array[j+d]=temp;
    				}
    			}
    			d=d/2;                   //缩小增量
    		}
    	}
    	public static void main(String []args){
            int []arr = {9,8,7,6,5,4,3,2,1};
            Shell(arr, arr.length);
            System.out.println(Arrays.toString(arr));
        }
    }
    

      

  • 相关阅读:
    百度之星资格赛1001——找规律——大搬家
    HDU1025——LIS——Constructing Roads In JGShining's Kingdom
    DP(递归打印路径) UVA 662 Fast Food
    递推DP UVA 607 Scheduling Lectures
    递推DP UVA 590 Always on the run
    递推DP UVA 473 Raucous Rockers
    博弈 HDOJ 4371 Alice and Bob
    DFS(深度) hihoCoder挑战赛14 B 赛车
    Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 2)
    DP(DAG) UVA 437 The Tower of Babylon
  • 原文地址:https://www.cnblogs.com/lc-java/p/7930430.html
Copyright © 2011-2022 走看看