直接插入排序

直接插入排序是在本数组中,从第二个元素开始,将其与第一个元素进行比较,如果比第一个元素大的话,不动进行第三个元素的排序,如果比第一个元素小就将第一个元素后移一位,将第二个元素插入到第一,然后进行第三个元素的比较......


//若当前数目比前面元素小的话,先通过循化来找到这个数字应该在此次循环中所排的位置,然后再通过循环将元素依次进行后移,将该数插入到指定位置。

void directInsert2(int *arr, int lenth)
{
	if (arr == NULL) return;
	for(int i=1; i<lenth; ++i)
	{
		int tmp = arr[i];
		int j=i-1;
		for( ; j>-1; --j)
		{
			if (arr[j]<tmp) 
			    break;
		}
		int num = i;
		while(num > j+1)
		{
			arr[num] = arr[num-1];
			num--;
		}
		arr[num] = tmp;
	}
}


//用当前元素与前面元素进行比较,如果比前面元素小的话,就与之交换数值,然后再判断其与当前位置的前一位的大小,如果小的话进行交换,直至找到比前面位置数值小的位置停止比较...

void insert_dirc1(int *arr, int len)//比较一次移动一次
{
	for(int i=1; i<len; i++)
	{
		int num = i;
		while(num>0)
		{
			if (arr[num] < arr[num-1])
			{
				swap(&arr[num], &arr[num-1]);
			}
			else
			{
				break;
			}
			num--;
		}
	}
}


插入排序适合基本有序的数组的排序,如果数组中的数值基本有序,则数值需交换次数很少。但是如果按从大到小排序,而数组初值是从小到大,那该次排序的效率将达到最差,其移动的次数是:n, n-1,n-2,......3,2,1。其时间复杂度则将接近于O(N*N)。希尔排序就是将数组中的值均匀的分散,使其先达到基本有序,然后再对其整体进行插入排序。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值