前言
排序算法可以分为基本排序算法和高级排序算法,如果从基本算法里找出性能最好的算法,那么插入排序算是不二之选了.他的时间复杂度T(n2),但是要比冒泡和选择排序都要快一点.他的实现类似于QQ斗地主中抓牌一样.把一个待排序的数据按照大小,插入一个已经排序好的序列中.如下所示,当你抽牌的时候,系统会自动帮你把牌放入到合适的位置.
实现思路
- 用降序排序序列,采用线性结构实现.
- 准备一个数据,这个数据不属于已排序序列.在本例中,我们使用整形常量8.
- 将准备的数据和序列的数据,从最后一个开始,依次向前对比,本例采用降序,如果发现数据比序列中的数据小,则记录位置
- 在记录的位置加1处,让序列中的数据向后移动,然后插入数据.跳出方法.插入排序完成.
代码实现
public class Test {
/**
* @param args
*/
public static int[] objTest=new int[]{13,12,11,9,7,6,5,5,3,8}; //手牌序列
public static void main(String[] args) {
// TODO Auto-generated method stub
insertion_sort(objTest);
for(int i=0;i<objTest.length;i++){
System.out.print(objTest[i]+" ");
}
}
/**
* 插入排序实现
* @param arr 要插入其中的序列
*/
public static void insertion_sort(int[] arr){
int length=arr.length-2; //要对比的序列中最后一个数据的位置
int data =arr[9]; //要插入的数据
for(int i=arr.length-2;i>=0;i--){
if(data<arr[i]){
int index=i+1;
//数组依次后移
while(length+1>index){
arr[length+1]=arr[length];
length--;
}
arr[index]=data;
break; //跳出循环
}
}
}
}
参考资料
<Java数据结构与算法>
<算法导论>
<大话算法>
某大神博客:http://www.cnblogs.com/kkun/archive/2011/11/23/2260265.html