插入排序的实现

1.时间复杂度  n^2,但是少量数据的情况下比归并排序要好,因为归并排序的常数因子很大!
2.原址排序
void insert_sort(int date[], int n)
{
    int key;//待插入的值
	int i;
	int j;
	
	for (j = 0; j < n; ++j)
	{
	    key = date[j];//待插入的值
		i = j - 1;//当前位置的前一个位置
		while (i >= 0 && date[i] > key)//升序排序
		{
		    date[i+1] = date[i];
			date[i] = key;
			--i;
		}
	}
}

思想:设想一下,桌子上有一堆背着的牌(类似于一个等待排序的数组),然后呢,你开始拿到第一张牌并置入你的左手,你要记住,你的左手中的牌永远都是有顺序的(升或降序),你的右手
      拿起要插入的牌(这就是上面的key=date[j]).下面当你右手拿起一张待插入的牌时,怎么进行你的左手手牌中?因为你左手中的手牌已经有顺序的(假设为升序),两种情况:
	  再设一个约定:约定右手中的牌在进入左手中的牌时,是从右到左的顺序进行的(毕竟这样比较符合我们的动作-。-)
	  1)右手的牌比左手中的牌的最靠右边的牌要大,那么直接把右手的牌放入即可date[j];

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值