排序算法(二) 插入排序

插入排序:

从头到尾遍历数组

将当前元素同当前元素之前的所有元素对比
如果,当前元素小于其之前元素,将当前元素向前移,直到使当前元素之前的所有元素按大小排好序

代码如下:

package com.robert.paixu;

/**
 * 插入排序
 * 从小到大排序
 * @author Administrator
 */
public class InsertSortAlgorithm {
	
	public static void main(String[] args){
		int[] arrays = {4,6,9,2,0,1,-5,10,-20,100,20,15};
		insertSort(arrays);
		display(arrays);
	}
	
	/**
	 * 插入排序
	 */
	private static void insertSort(int[] arrays){
		//循环遍历数组
		int currentIndex = 0;
		int preIndex = 0;
		for(int i=0;i<arrays.length;i++)
		{
			/**
			 * 当前元素同当前元素之前的所有元素对比
			 * 1,将当前元素向前移,直到使当前元素之前的所有元素按大小排好序
			 */
			currentIndex = i;
			preIndex = i-1;
			while(currentIndex!=0&&preIndex>=0){
				if(arrays[currentIndex]<arrays[preIndex])
				{
					swap(arrays,currentIndex,preIndex);
					currentIndex--;
				}
				else
				{
					break;
				}
				preIndex--;
			}
		}
	}
	
	private static void swap(int[] arrays,int currentIndex,int preIndex){
		int temp = arrays[currentIndex];
		arrays[currentIndex] = arrays[preIndex];
		arrays[preIndex] = temp;
	}
	
	/**
	 * 显示排序后的数组的值
	 * @param arrays
	 */
	private static void display(int[] arrays){
		
		for(int i=0;i<arrays.length;i++){
			System.out.print(arrays[i]+" ");
		}
	}
	
}



在最好的情况下,即数组已经是有序的时候,插入排序的时间复杂度是O(n)

数组越有序,需要做的工作就越少

在最坏的情况下,该算法在最坏的情况下的时间复杂度为O(n^2)
 

posted @ 2012-09-14 15:05  梦见舟  阅读(137)  评论(0编辑  收藏  举报