插入排序

插入排序

插入排序:顾名思义就是将一个元素插入到一个有序的序列的合适位置。对于一个序列其第一个元素组成的子序列肯定是有序的,因为这个子序列只包含一个元素,遍历后边的元素,依次插入到前面有序的子序列的正确位置中。这个过程是通过不断交换位置来完成的。如有一个无序数组4,1,2需要按从小到大排列

第一步:将1插入到有序序列4的合适位置,发现需要交换,交换后为1,4。这时1,4已经有序了。
第二步:将2插入到1,4有序序列的合适位置,首先发现4,2需要交换位置,变为1,2,4。2再与前一个数进行比较发现无需交换位置,到此2已经插入到了合适的位置。

到此这个无需序列已经变成有序的了,数据量多一点也是按照这个思路排,理解起来很简单。

可以看出插入排序和选择排序(如果对插入排序还不太了解请点击这里)有所不同,插入排序所需要的时间取决于元素的初始顺序。例如,对一个很大且其中的元素已经有序或者大部分有序的数组进行排序的话会比对随机顺序的数组或逆序数组进行排序要快的多。插入排序对于实际应用中常见的某些类型的非随机数据是十分有效的

算法实现

实现代码如下:

public class Insertion {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Integer[] a = new Integer[]{1,4,6,2,0,3,2,7,8,1,9};
		sort(a);
		SortUtil.show(a);
	}
	
	public static void sort(Comparable[] a){
		int size = a.length;
		for (int i = 1; i < size; i++) {
			for(int j = i;j>0&&SortUtil.less(a[j], a[j-1]);j--){
				SortUtil.exch(a, j, j-1);
			}
		}
	}

}

从上面的代码中可以看出实现起来很简单,插入排序对于部分有序的数组是十分高效的,也很适合小规模的数组。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值