码迷,mamicode.com
首页 > 编程语言 > 详细

内排序-希尔排序

时间:2018-08-20 00:32:53      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:不同   index   arraylist   选择   完成   arrays   直接插入排序   print   不同的   

 算法思想:希尔排序可以看作是插入排序的一种变种,唯一不同的事选择一个间隔(大于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];
            
        }
}

 

内排序-希尔排序

标签:不同   index   arraylist   选择   完成   arrays   直接插入排序   print   不同的   

原文地址:https://www.cnblogs.com/mytrip/p/9478275.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!