算法:直接插入排序


活动地址:CSDN21天学习挑战赛

一.直接插入排序

1.定义(概念)

是一种最简单的排序方法,其基本操作是将一条记录插入到已排好的有序表中,从而得到一个新的、记录数量增1的有序表

2.逻辑

2.1.1 文字逻辑

每次需要插入的元素与序列中的每个元素进行比较,如果小了则往前移,如果大了则往后移,直到选到该序列最合适的位置,然后插入进去。
通俗的解释 打扑克时,抓牌的情景,首先抓到一张J,第二次抓到一张Q,Q比J大,所以Q插到J的后面,第三次抓到一张10,10比Q小,又比J小,所以10插到最前面,依次逻辑…
在这里插入图片描述

2.1.2图片解析

在这里插入图片描述

3.代码

算法代码

for (i = 1;i < sz;i++)
	{
		int j = i-1;      //arr[i]与前面一个数比较
		tmp = arr[i];    //利用tmp进行监视
		while (tmp < arr[j])
		{
			arr[j+1] = arr[j];	//元素向右移
			j--;      //j向左移,寻找arr[i]的合适位置
		}
		arr[j+1] = tmp;  //将arr[i]元素插入到合适的位置
	}

完整代码实现

#include <stdio.h>
int main()
{
	int arr[] = { 11,34,20,10,12,35,41,32,43,14 };
	int tmp = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	int i = 0, k = 0;
	for (i = 1;i < sz;i++)
	{
		int j = i-1;  //arr[i]与前面一个数比较
		tmp = arr[i];
		while (tmp < arr[j])
		{
			arr[j+1] = arr[j];	//元素向右移
			j--;
		}
		arr[j+1] = tmp;
	}
	for (i = 0;i < sz;i++)
		printf("%d ", arr[i]);
	return 0;
}

在这里插入图片描述

4.时间复杂度和空间复杂度分析

1. 时间复杂度

  • 最坏的情况
    时间复杂度为O(n^2)
  • 最好的情况
    时间复杂度为O(n)
  • 平均情况
    时间复杂度为O(n^2)

2.空间复杂度分析

只使用了一个临时变量 tmp,所以空间复杂度为O(1)。

5.参考文章

@一头小山猪
http://t.csdn.cn/8w2Yt

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

痴☞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值