IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【算法】逻辑十分缜密,思路清晰的带大家一次性学会常见的排序算法系列ヾ(≧▽≦*)o。(三)插入排序 -> 正文阅读

[数据结构与算法]【算法】逻辑十分缜密,思路清晰的带大家一次性学会常见的排序算法系列ヾ(≧▽≦*)o。(三)插入排序

?前言?:

算法是一个程序员的内功,能很好的体现程序员的编程思维,通过学习和掌握常见的算法,不仅能提高coding能力,还能更加容易在笔面试中脱颖而出。本专栏将记录博主刷算法题的过程,不定期的会更新一些优质的算法题。如果对大家有帮助,别忘了三连支持哟!


目录

?前言?:

?插入排序的思想?

💎如何进行插入💎

??💎插入的具体方法💎

??插入排序具体代码的实现?

?时间复杂度的计算?

?



?插入排序的思想?

💡:插入排序的核心思想就是插入二字,理解要如何插入和其内在的逻辑对深刻理解插入排序至关重要。

💎如何进行插入💎

🔑:我们假设要对n个数进行插入排序,那么我们的步骤是,先让下标0~0上有序(只有一个数显然成立),我们再把下标为1的数插入进这个有序序列中去让0~1上有序,而我们要实现0~2上有序,只需要让2位置的数插入到0~1上(这时0~1上的数相对顺序不变,其还是有序的,让2位置的数插入到应该在的位置),以此类推,最后一次时,下标为0~n-2上所有数都已经有序了,只需要将下标为n-1的元素插入到0~n-2这个有序序列中去。从这样的逻辑分析,每次我们让后面一个数插入时,前面所有数都已经有序,由这样的逻辑分析下去最后一定让所有数全部有序。

??💎插入的具体方法💎

🔑上文讲了插入排序的全部过程,但并没有细致的讲具体是如何进行插入的,其实插入的过程只有一个步骤:

? ? ?比如我们现在想要让0~n上排成升序,由上述可知,此时0~n-1上一定已经有序,我们插入的时候不能改变原本0~n-1上所有元素的相对顺序,只需要让n位置的元素向左看与它相邻的元素,如果n位置的元素比左边的小,就让两个元素进行交换,然后这个元素继续与左边的元素比较,如果小就交换,直到它比左边元素大或者左边没有元素时才会停下来。

💡:插入的步骤可以简化为4个字 (看 比 换 停)。


讲到这里相信大家对插入排序的大致思路显然已经十分清晰了,如果大家胸有成竹,请大家先自己写一篇,再过来看看我写的代码,这样效果最好。


??插入排序具体代码的实现?

#include<stdio.h>
void Swap(int arr[], int i, int j)
{
	//两种方法
	int tmp = arr[i];
	arr[i] = arr[j];
	arr[j] = tmp;
	
	//arr[i] = arr[i] ^ arr[j];
	//arr[j] = arr[i] ^ arr[j];
	//arr[i] = arr[i] ^ arr[j];
}
void insertionSort(int arr[], int sz)
{
	for (int i = 1; i < sz; i++)//控制插入排序的范围即0-1....0-n-1
	{
		for (int j = i - 1; j >= 0 && arr[j + 1] < arr[j]; j--)
		{
//满足两个条件才交换
//1:小于左边的数
//2:没有越界

			Swap(arr, j, j + 1);
		}
	}
}

?时间复杂度的计算?


以上代码,还可做优化在此仅作参考,若有更好的算法,还望能够私信告知,多谢各位。

由于本人水平十分有限,若有错误请即使告知!如果有帮助别忘了,万分感谢。

点赞👍? ? ? ? ?收藏?? ? 关注?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-12 20:44:24  更:2021-09-12 20:44:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 14:38:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码