直接插入排序

直接插入排序(Straight Insertion Sort)的基本操作是 将一个记录插入到已经排好序的有序表中,从而得到一个

新的,记录数增1的有序表。

java实现:

public static void Insert_Sort(int[] arr)
	{
		for(int i = 1; i < arr.length; i ++)
		{
			int j,temp;
			if(arr[i] < arr[i-1])
			{
				temp = arr[i];
				for(j = i-1; j >= 0 && arr[j] > temp; j--)  //arr[j]>temp,将大于temp(arr[i])的部分向右移动一位
				{					//如现在是 {1,3,4,5},temp=arr[i]=2,那么 将arr[j]>2的部分
					arr[j+1] = arr[j];		//也就是 3,4,5向后移动一个位置,这个时候再把 temp也就是arr[i] = 2
				}					//插入到3的位置。
				arr[j+1] = temp;  //将temp(arr[i])插入进去
			}
		}
	}

我们来分析一下这个算法,从空间上来看,它只需要一个记录的辅助空间,因此是看它的时间复杂度。


当最好的情况,也就是要排序的表本身就是有序的,比如纸牌拿到手后就是{2,3,4,5,6},那么我们比较次数,

其实就是 arr[i] 与 arr[i-1] 的比较,共比较了 (n-1)*(2+3+4+...+n)次,由于每次都是 arr[i] > arr[i-1],

因此没有移动的记录,时间复杂度为O(n)。


当最坏的情况,即待排序表示逆序的情况,比如{6,5,4,3,2}, 此时需要比较 【2+3+4+...+n = (n+2)*(n-1)/2】 次,

而记录的移动次数也达到最大值Σ[2,n](i+1) = 【(n+4)(n-1)/2】次。

如果排序记录时随机的,那么根据概率相同的原则,平均比较和移动次数约为n²/4次。因此我们得出直接插入排序法

的时间复杂度为O(n²),同样的O(n²)时间复杂度,直接插入排序法 比 冒泡 和 简单选择排序的性能要好一些。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值