插入排序就是重复的将新的元素插入到一个已经排好序的子线性表中,直到整个线性表排好序。
package test;
public class project1 {
public static void main(String []args) {
int []list= {9,4,5,1,2,0,15,45,89,24,16,3,8,99,102,78};
insertionSort(list);
for(int i:list) {
System.out.print(i+" ");
}
}
public static void insertionSort(int[] list){
int k=0;
int current=0;
for(int i=1;i<list.length;i++) {
current=list[i];
for( k=i-1;k>=0&&list[k]>current;k--)
list[k+1]=list[k];
list[k+1]=current;
}
}
}
输出结果:0 1 2 3 4 5 8 9 15 16 24 45 78 89 99 102
该方法是用for嵌套的for循环实现的。外层循环的迭代是为了获取已经排好序的线性表,其范围从list[0]到list[i]。内层循环将list[i]插入到list[0]到list[i-1]的子线性表中。
在第k次的迭代中,为了将一个元素插入到一个大小为k的数组中,将进行k次比较来找到插入的位置,还要运行k次的移动来插入元素。