标签:不同 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