排序--直接插入排序

一,引言

插入排序作为C语言学习中常见的七种排序之一,有这很强的教学意义,有助于提高同学们的代码能力,思维水平,下面我将详细介绍和讲解插入排序。

二,详细介绍

在一个数组中有一串乱序的数,插入排序就是首先将第一个位置看作有序,后面的第二个位置的数字和第一个进行比较,如果小于将第一个移动第二个的数的位置,如果大于则将该数字顶到这个位置。下面我将基于一组例子讲解:

如图这个数组中又八个数字,第一次排序将第一个位置(4)看作有序,将第二个位置(6)看作无序和前面进行排序 此时4小于6,则位置不懂,第一次排序结束。此时第一个位置和第二个位置(4)(6)为有序。

第二趟排序(4)(6)有序将第三个位置(2)看作无序,(2)和之前的数据进行比较,第一次比较(2)小于(6)则将第三个位置暂时用一个变量进行储存以防止数据丢失,将(6)向后平移到第三个位置(2)进行拷贝,此时第二个位置前面还有数据,继续和第一个位置(4)进行比较--(2)小于(4)则进行将(4)进行向后平移到原数组(6)的位置。最后(4)前面没有数据则将(2)拷贝在第一个位置(4)。完成第二趟排序。如图:

第三趟排序前三个数据有序,第四个无序和前三个进行比较遇到小的值停下或者走到开头停下

这个例子(6) 小于(7)所以直接停下。

第四趟排序前四个作为有序第五个数据和前四个比较,最后停在(2)的后面如图:

后面的数据一次类推直到最后一个数据结束这里不一一介绍。

三,代码实现

/直接插入排序
void InsertionSort(int* p, int bit)
{

	for (int i = 1; i < bit; i++)
	{
		int j = i;
		int trm = p[j];
		while (j > 0)
		{
			if (p[j - 1] < trm)
			{
				break;
			}
			p[j] = p[j - 1];
			j--;
		}
		p[j] = trm;
	}
}

 while循环负责控制单次循环,for循环负责连接整个数组。

四,空间复杂度

由于这个排序并没有开辟额外的空间所以空间复杂度为O(1)。

五,时间复杂度

计算最坏情况,一共N个数据,第二个数据排列1次,第三个排列2次,第四个排列3次......第N个数据排列(N-1)次。综上时间复杂度为O(N^2)。

六,稳定性

判断该排序稳不稳定的依据是:相同数据经过排序相对位置有没有发生改变,若没有改变则证明该排序稳定,反之不稳定。此排序进行的是依次排序没有改变相对位置,所以直接插入排序是稳定排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值