插入排序法的原理;
通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应的位置并插入。对于给定的一组记录,初始时假定第一个记录自成一个有序序列,其余记录为无序序列。接着从第二个记录开始,按照记录的大小依次将当前处理的记录插入到其之前的有序序列中,直到最后一个记录插到有序序列中为止。
具体;
假定Lenght是数组A的长度,
首先假设第一个元素被放置在正确的位置上,这样仅需从1到Lenght-1范围内对剩余元素进行排序。
对于每次遍历,从0 到i-1范围内的元素已经是有序的。
每一次从0 到 i 的遍历:通过扫描前面已排序的子列表,找到相应的位置并插入。
import java.util.Random;
public class insertion {
public static void main(String[] args) {
Random rd=new Random();
//遍历数组
int [] data = new int[10];
for (int i = 0; i <data.length ; i++) {
data[i]=rd.nextInt(100);
}
for (int i = 0; i <data.length ; i++) {//遍历输出未排序前的数组
System.out.print(data[i]+" ");
}
System.out.println();
//它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描, //找到相应位置并插入。
for (int i = 0; i <data.length-1 ; i++) {
//设置第i个元素是哨兵,从第i个元素之前的元素都是以排好序,将第i+1位置的元素插入//已排序的序列中
//从第i个位置向前遍历,找到temp插入合适位置
int pos=i;//哨兵位置
int temp=data[pos+1];//temp待排序的数据
for(;pos>=0&&data[pos]>temp;pos--) data[pos+1]=data[pos];
//pos位置就是插入temp值的位置
//计算插入位置的最后一步多减的1加回
data[++pos]=temp;
}
for (int i = 0; i <data.length ; i++) {//遍历输出排序后的数组
System.out.print(data[i]+" ");
}
}
}