插入排序

插入排序

简介

插入排序(Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

算法原理

可以看作是斗地主时抓牌的过程。在一个长度为n的数组中,把第一个元素看作是已经排序好的数组,用第二个数组遍历已经排序好的数组,插入对应的位置,此时前两个元素是已经排序好的;再用第三个元素对排序好的数组遍历,插入到合适的位置,此时前三个元素是已经排序好的数组,依次类推,直到最后一个元素插入到已排序好的数组中,排序完成,数组变为有序数组。

代码实现

public static int [] InsertSort(int[] a)
	{
		for(int i=1;i<a.length;i++)
		{
			temp=a[i];
			int j=i-1;
			while(j>=0&&temp<a[j])
			{
				a[j+1]=a[j];
				j--;
			}
			a[j+1]=temp;
		}
		return a;
	}

从第二个元素开始循环,从后向前作比较,当数组中的元素大于要插入的元素时,将数组中的当前元素向后移动一位,直到找到第一个比要插入的元素小的元素,将要插入的元素,放在这个元素的后面。代码中a[j+1]=temp,而不是a[j]=temp是因为假设有序数组的最后一位就比要插入的元素小,此时这个元素就不用移动,又j=i-1,所以是a[j+1]=temp;假设所有元素都比要插入的元素大的话,在while中a[0]也符合条件,进入循环体,j--变为-1,所以要a[j+1]=temp。处理这种下标问题,只要考虑特殊情况,一般都能找到正确答案

posted @ 2017-07-19 00:08  Lee_Shuai  阅读(103)  评论(0编辑  收藏  举报