插入排序的基本思想,逐个考察每个待排序元素,将每一个新元素插入到前面已经排好序的序列中适当的位置,使得新序列仍然有序。
1.直接插入排序
排序思想:只有一个元素的序列总是有序的,对n个记录的序列,可从第二个元素开始直到第n个元素,逐个向有序序列执行插入操作
插入方法:逐个向前比较,边比较边插入边挪动,直到合适位置;或者一直向前比较先找到插入点,再把插入点以后的元素后移一位,插入新元素。
public static void insert(int[] arr){ // 传入数组
for(int i=1;i<arr.length;i++){ //因为只有一个元素时总是有序的,从第2个元素开始依次插入
int j=i;
while(j>0&&arr[j]<arr[j-1]){
int t=arr[j];
arr[j]=arr[j-1];
arr[j-1]=t;
j--;
}
}
}
2.折半插入
3.希尔排序
public static void shellSort(int[] arr,int[] delt){
for(int i=0;i<delt.length;i++){
int gap=delt[i];
for(int j=gap;j<arr.length;j++){
for(int k=j-gap;k>=0;k--){
if(arr[k]>arr[k+gap]){
int temp=arr[k];
arr[k]=arr[k+gap];
arr[k+gap]=temp;
}
}
}
}
}