插入排序的思想就跟玩扑克一样,每一步将一个待排序的元素,按其排序码的大小,插入到前面已经排好序的一组元素的合适位置上去,直到元素全部插完为止。
1.插入排序算法图解

图解:根据其原理,我们把该无序数列看成两个部分,我们不难看出图中,首先我们把第一位3看成是有序数列,剩下的作为无序数列,因为要把后面的无序数列中的数插入到前面有序数列,所以依次把后面的数抽出,在前面找到合适位置插入。如图,先抽出44,与前面比较,比3大放在3后面,再抽出38,与前面比较,比44小,比3大,所以插入到3后面。依次类推,直到最后的一个数也插入到前面的有序数列中。
算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。
2.代码实现
int[] arr = {12, 8, 8, 34, 56, 10, 2, 77, 33};
int temp;
int j;
for(int i=1;i<arr.length;i++){
temp = arr[i]; //把要插入的数字保存到临时变量temp中
for(j=i-1;j>=0;j--){
if(temp>arr[j]){
break; //发现了要插入的位置。
}else{
arr[j+1]=arr[j]; //元素依次向后移动
}
}
arr[j+1]=temp;
}
System.out.println("----------------排序之后----------------");
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+ " ");
}
运行结果:
----------------排序之后----------------
2 8 8 10 12 33 34 56 77