数据结构和算法-排序算法(插入排序)
数据结构和算法-排序算法(插入排序)
插入排序第一种算法是简单插入排序。
package suanfa;
public class MySort {
public void insertSort(int[] data){
for(int i=1;i<data.length;i++){
int base=data[i];
int index=i-1;
while(index>=0&&data[index]>base){
data[index+1]=data[index];
index--;
}
data[index+1]=base;
}
}
public static void main(String[] args){
int[] data=new int[]{9,8,7,65,4,3,32,223,1};
MySort mySort=new MySort();
mySort.insertSort(data);
for(int value:data){
System.out.println(value);
}
}
}
每次i增加1,然后增加后都要确保i及i之前的数组是有序的(将第i个元素找到合适的位置进行插入)。
插入排序的第二种算法是希尔排序,这个是插入排序的升级版,为啥有性能上的提升呢?
因为我们都知道在插入排序中越是整体有序的数组,插入排序的速度越快。而我们的希尔排序就是逐步将数组变得整体有序(希尔排序的最后一步,步长为1和插入排序相同)
package suanfa;
public class MySort {
public void shellSort(int[] data){
for(int i=data.length/2;i>0;i=i/2){
for(int k=i;k<data.length;k++){
int base=data[k];
int index=k-i;
while(index>=0&&data[index]>base){
data[index+i]=data[index];
index=index-i;
}
data[index+i]=base;
}
}
}
public static void main(String[] args){
int[] data=new int[]{9,8,7,65,4,3,32,223,1};
MySort mySort=new MySort();
mySort.shellSort(data);
for(int value:data){
System.out.println(value);
}
}
}
浙公网安备 33010602011771号