内排序-希尔排序

Posted mytrip

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内排序-希尔排序相关的知识,希望对你有一定的参考价值。

 算法思想:希尔排序可以看作是插入排序的一种变种,唯一不同的事选择一个间隔(大于1的值),先对按照间隔选择的序列进行插入排序,最后蜕减到间隔数为1 也即普通插入排序,则完成排序

 

package Sort;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ShellSort
{

    public static void main(String []args)
    {          
         // List<Integer> a=Arrays.asList( 15, 27, 36, 53, 4, 69, 87, 0, 88, 89, 90, 91, 6, 5 );  
        int[] a = new int[] { 20, 30, 90, 40, 70, 110, 60, 10, 100, 50, 80, 1, 2 };
           ShellSort shellSort=new ShellSort();
           shellSort.Sort(a);           
           for (int i : a)
            {
                System.out.println(i);
            }
    } 
    
    public void Sort(int[] array  )
    {        
        
        int m=array.length/2;
        for(int i=m;i>=1;i--)//m的值蜕减到1 时 就是我们常见的直接插入排序
        {
          DirecSort(array,i);
        }
    }    
    
    
    public void DirecSort(int[] array ,int m)//直接插入排序 m的值始终都为1 
    {    
        for(int i=m;i<array.length;i=i+m) 
        {            
            for(int j=i;j>0&& array[j]<array[j-m];j=j-m ) //这里和和直接插入排序是一样的,唯一不同的是这个增量m
            {                
                ExchangeData(array,j,j-m);                
            }            
       }
        
    }
    
    /// 交换数据
        void ExchangeData(int[] datas, int index1, int index2)
        {
            
            datas[index1]=  datas[index1]+datas[index2];
            
            datas[index2]=  datas[index1]-datas[index2];
            
            datas[index1]=  datas[index1]-datas[index2];
            
        }
}

 

以上是关于内排序-希尔排序的主要内容,如果未能解决你的问题,请参考以下文章

计软考研双日练 | 希尔排序的组内排序采用什么方式

内排序之希尔排序

插入排序与希尔排序算法

希尔排序(缩小增量排序)

希尔排序(缩小增量排序)

希尔排序