package algorithm;
public class InsertSortDemo01 {
public static void main(String[] args) {
int a[]={7,9,3,6,1};
// insert(a);
// out(a);
insert1(a, 2);
out(a);
}
public static void insert(int array[]) {
int temp;
int i,j;
for(i=1;i<array.length;i++){
temp = array[i];
for(j=i-1;j>=0 && temp<array[j];j--){
array[j+1]=array[j];
}
array[j+1]=temp;
}
}
public static void insert1(int array[],int step) {
int temp;
int i,j;
for(i=step;i<array.length;i+=step){
temp = array[i];
for(j=i-step;j>=0 && temp<array[j];j-=step){
array[j+step]=array[j];
}
array[j+step]=temp;
}
}
public static void out(int array[]) {
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]);
}
System.out.println();
}
}
前几天写了一个直接插入排序,今天做了一些修改,使代码更加简洁,具体可以查看insert()函数。下面对insert1()函数做一个简单的分析,因为希尔排序中也要用到直接插入排序,所以就对insert()函数进行了一些修改,增加了步长step的定义,当step=1时就是一个简单的直接插入排序。我先简单的说一下希尔排序,希尔排序是对直接插入排序的改进,第一个循环是对步长的设置,一次次减半变小,直至步长变为1,第二循环是将固定的步长将一个队列分成n各组,每一组进行一次直接插入排序。所以在insert1()中增加了步长的变量。