基本思想
将数组中的全部元素依次跟前面已排元素进行比较,通常是先跟前面两个相比,如果该元素比已排序的元素小(大),则进行插入,直到全部元素都比较过为止。
算法描述
算法描述如下:
①. 从前两个元素可以认为已经被排序,将其看成一个数组
②. 取出下一个元素,在已经排序的元素序列中从后向前扫描
③. 如果该元素比它的前一个小,将该元素移到下一位置,继续跟前一个元素比较
④. 找到位置后将该元素插入
⑤. 继续下一个元素,重复上述步骤
动态图解释(图片来源网络)
代码实现如下:
方案一:
public class 插入排序 {
public static void main(String[] args) {
int[]a= {3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
for(int index = 0;index<a.length-1 ; index++) {
//index为待插入数组最后一个元素的位置索引
int temp = a[index+1];
int insert_index = index+1;
//寻找待插入位置索引
for(int i = index;i>=0;i--) {
if(temp < a[i]) {
insert_index = i;
}else {
break;
}
}
//把插入位置之后的元素向后移动一个位置
for(int j = index ; j>=insert_index ; j--) {
a[j+1]=a[j];
}
a[insert_index]=temp;
}
for(int i = 0;i<a.length;i++)
System.out.println(a[i]+" ");
}
}
方案二:
public class 插入排序 {
public static void main(String[] args) {
int[] a = { 3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48 };
for (int i = 1; i < a.length; i++) {
int j = i - 1;
int temp = a[i];
while (j >= 0 && a[j] > temp) {
a[j + 1] = a[j];
j--;
}
a[j + 1] = temp;
}
for (int i = 0; i < a.length; i++)
System.out.println(a[i] + " ");
}
}
结果如图
欢迎大家留言讨论!