排序算法之插入排序(InsertSort)

  插入排序算是比较简单易懂的一种排序方法,和扑克牌排序类似。通俗来说就是每拿到一张牌,和手上的牌比较,插入到合适的位置,每次都是手上的牌已经排好序,从桌上随意拿一张插入其中,直到全部插入,排序完成。

  桌上的牌就相当于我们要排序的一组数。插入排序采用的是原址排序的方法,省空间,所谓原址排序就是在原本的数组中操作,最多只有常数个数储存在数组外面。其实现算法如下:

INSERTION-SORT(A)
  for j=2 to A.length           //从第二个开始插入,直到全部插入完
    key=A[j]                    //创建一个变量保存当前需要插入的数的值
    i=j-1                       //开始和要插入的数前一个比较
    while i>0 and A[i]>key      //前面还存在需要比较的数且前面的数更大时
      A[i+1]=A[i]               //把前面更大的数赋给后一个
      i=i-1
    A[i+1]=key                  //直到前面没数或者前面的数小于要插入的数时,将要插入的数赋给该数后一个即可

  用java来实现如下:

public static void insertSort(int[] A) {
	for(int j = 2;j <= A.length;j++){
		int key = A[j-1];
		int i = j-1;
		while(i > 0&&A[i-1]>key){//转化成数组下标时要减一
                     A[i-1+1] = A[i-1];
		     i--;
                }
		A[i-1+1] = key;
	}
}

  实现的时候注意下标即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值