插入排序

本文详细介绍了插入排序的概念及其两种主要形式——直接插入排序和折半插入排序。重点讲解了直接插入排序的具体实现步骤、特点及时间复杂度分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。插入排序方法分为直接插入排序和折半插入排序。

直接插入排序:

static void insert_sort(int [] unsorted)
{
for(int i=1;i<unsorted.Length;i++)
{
if(unsorted[i-1]>unsorted[i])
{
int temp=unsorted[i];
int j=i;
while(j>0&&unsorted[j-1]>temp)
{
unsorted[j]=unsorted[j-1];
j--;
}
unsorted[j]=temp;
}
}
}

static void Main(string[] args)
{
int[] x={6,2,4,1,5,9};
insertion_sort(x);
foreach(var item in x)
{
if(item > 0)
    Console.WriteLine(item+",");
}
Console.ReadLine();
}
直接插入排序的特点:

1、它是稳定排序,不改变相同元素原来的顺序。

2、它是in-place排序,只需要O(1)的额外内存空间。

3、它是在线排序,可以边接收数据边排序。

4、对小数据集是有效的。

5、它跟我们排扑克牌的方式相似。


直接插入排序算法分析:

设待排序对象个数为n,则该算法的主程序执行n-1趟排序码比较次数和对象移动次数与对象排序码的初始排列有关。

*最好情况下,排序前对象已经按要求的有序了。比较次数(KCN):n-1;移动次数(RMN)为:0。则对应的时间复杂度为O(n)。

*最坏情况下,排序前对象为要求的顺序的反序。第i趟时第i个对象必须与前面i个对象都做排序码比较,并且每做1次比较就要做1次数据移动。比较次数(KCN):i从1到n-1求和,为n(n-1)/2,约为n^2/2;移动次数(RMN)也为n^2/2。则对应的时间复杂度为O(n^2)。

如果排序记录是随机的,那么根据概率相同的原则,在平均情况下的排序码比较次数和对象移动次数约为n^2/4。因此,直接插入排序的时间复杂度为O(n^2)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值