排序之直接插入排序(Java)

定义:直接插入排序,每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。

算法:第1次,取出第2个元素与第1个元素比较,如果需要交换,第1个元素后移一个单位,将第2个元素插入到第1个元素的位置。现在前两个元素有序。第2次,取出第3个元素分别与前两个元素比较,如果需要交换,则后移一个单位,将第3个元素插入到最后移动的元素的位置。以此类推,第n-1次,取出第n个元素,分别与前n-1个元素比较,如果需要交换,则后移一个单位,将第n个元素插入到最后移动的元素的位置。

适用范围:元素较少且原数据基本有序。

/**
	 * 
	 * @param array
	 * @param asc :true 升序;false 降序
	 */
	public void insertSort(int [] array,boolean asc){
		int arrLen=array.length;
		for(int i=1;i<arrLen;i++){
			int j=i-1;
			int tempItem=array[i];
			boolean isAsc=true;
			boolean isSwap=false;
			while(j>=0){
				isAsc=asc?tempItem<array[j]:tempItem>array[j];
				if(isAsc){
					array[j+1]=array[j];
					j--;
					isSwap=true;
				}
				else{
					break;
				}
			}
			if(isSwap){
				array[j+1]=tempItem;
			}
		}
	}
升序为例:
int array[] ={49,38,65,97,76,13};
insertSort(array,true);


结果简述:

初始序列:

49,38,65,97,76,13

第一次过程中:

取出38与49比较

第1个元素49移动到第2个元素38的位置

49,49,65,97,76,13

第一次结束:

第2个元素38插入到最后移动的元素(第1个元素49)位置

38,49,65,97,76,13

第二次过程中:

取出65

49与65比较,不需要移动。跳出。(不必再比较38与65,因为第一次排序后已经有序)

第二次结束:

38,49,65,97,76,13

第三次过程中:与第二次比较情况相同。

第三次结束:

38,49,65,97,76,13

第四次过程中:

取出76

与97比较,97后移一个单位

38,49,65,97,97,13

与65比较,不需要移动。(无需再比较65之前的元素)

第四次结束:

76插入到元素97的位置

38,49,65,76,97,13

第五次过程中:

取出13

与97比较,97后移一个单位

38,49,65,76,97,97

与76比较,76后移一个单位

38,49,65,76,76,97

与65比较,65后移一个单位

38,49,65,65,76,97

与49比较,49后移一个单位

38,49,49,65,76,97

与38比较,38后移一个单位

38,38,49,65,76,97

第五次结束:

13插入到元素38的位置

13,38,49,65,76,97

排序结束。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值