Java数据结构与算法之插入排序

前言

排序算法可以分为基本排序算法和高级排序算法,如果从基本算法里找出性能最好的算法,那么插入排序算是不二之选了.他的时间复杂度T(n2),但是要比冒泡和选择排序都要快一点.他的实现类似于QQ斗地主中抓牌一样.把一个待排序的数据按照大小,插入一个已经排序好的序列中.如下所示,当你抽牌的时候,系统会自动帮你把牌放入到合适的位置.

Java数据结构与算法之插入排序_第1张图片

实现思路

  • 用降序排序序列,采用线性结构实现.
  • 准备一个数据,这个数据不属于已排序序列.在本例中,我们使用整形常量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

你可能感兴趣的:(java,数据结构,android,插入排序,排序算法)