插入排序基本思想:将一个未排序的数列,按其大小插入前面已经排好的序列适当位置上,直到全部插入完为止。
抽象的思想往往真的是很让人头痛呀,其实很简单。平时大家打扑克牌的时候,采用的就是插入排序。仔细想想看,当我们摸上第一张扑克牌时,默认我们手里的排就是有序的,因为就只有一张。当我们摸上第二张扑克牌时,会根据第二张的大小,跟第一张进行比较,决定第二张扑克牌是该放在第一张的左边还是右边。重复这样的过程,直到桌上的扑克牌摸完。这时我们会发现自己手里的排是有序的,这种有序的排列就是插入排序。
用一个简单的Demo,展示一下Java实现插入排序的过程:
public static void main(String[] args) {
int a [] = {4,20,7,3,1};
int c [] = insertSort(a);
for (int i = 0; i < c.length; i++) {
System.out.print(c[i]+" ");
}
}
public static int [] insertSort(int a[]){
int insertNode ;
int j;
for(int i=1;i<a.length;i++){
insertNode = a[i];
j = i-1;
while(j>=0 && a[j]>insertNode){
a[j+1] = a[j];
j--;
}
a[j+1] = insertNode;
/*-------------------此段代码只是为了研究插入排序运行流程而添加-----------------------*/
for (int k = 0; k < a.length; k++) {
System.out.print(a[k]+" ");
}
System.out.println();
/*-------------------此段代码只是为了研究插入排序运行流程而添加-----------------------*/
}
return a;
}
流程解析:
未排序数列:4,20,7,3,1
---------------------------------------------------------------------------------------------------------------------------------
第一趟排序:
排序前数据:4 20 7 3 1
默认一个数据4是有序的,4和20进行比较,发现4和20是有序数列,不用变。
排序结果:4 20 7 3 1
---------------------------------------------------------------------------------------------------------------------------------
第二趟排序:
排序前数据:4 20 7 3 1
首先20和7比较,交换位置。其次4和7比较,有序不变。
排序结果:4 7 20 3 1
---------------------------------------------------------------------------------------------------------------------------------
第三趟排序:
排序前数据:4 7 20 3 1
首先3和20比较,交换位置。其次3和7比较,交换位置。最后4和3比较,交换位置。
排序结果:3 4 7 20 1
---------------------------------------------------------------------------------------------------------------------------------
第四趟排序:
排序前数据:3 4 7 20 1
首先20和1比较,交换位置。7和1比较,交换位置。4和1比较,交换位置。最后3和1比较,交换位置。
排序结果:1 3 4 7 20
---------------------------------------------------------------------------------------------------------------------------------
总结:小弟总结总结自己所学知识,望路过大神勿喷哈。谢谢!!!