21天打卡挑战 - 经典算法之直接插入排序

​CSDN打卡活动产出

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

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您:
想系统/深入学习某技术知识点…
一个人摸索学习很难坚持,想组团高效学习…
想写博客但无从下手,急需写作干货注入能量…
热爱写作,愿意让自己成为更好的人…

创作计划


机缘

实战项目中的经验分享
日常学习过程中的记录
通过文章进行技术交流

收获

希望以此结交到志同道合的朋友

日常

平均每周产出2-3篇文章.

有限的精力下,只能少一些玩游戏的时间,陪女朋友的时间不敢少

憧憬

期待粉丝上万 浏览过百万!!

**

学习计划

学习目标

永远充满热情,坚持21天学习打卡

学习内容

直接插入排序

学习日记


学习知识点

原理含义

        每次从原有数据中取出一个数,插入到之前已经排好的序列中,直到所有的数全部取完,那么新的有序排列也就完成了。
        通俗一点的解释就是好比我们在打扑克抓牌,所有的牌扣在桌面上,我们一张一张的抓,抓起一张就在手里把它排好。那么等我们把所有的牌都抓起来之后,手里的牌也都是有序的了。

算法流程

        对于计算机来说,我们必须要详细的告诉它如何比较大小,以及如何确定位置,毕竟它不能像我们一样,“一眼"就看出位置。试想一下,当数据量比较多的时候,我们也是需要一个一个的看过来,然后才能确定新插入元素的位置。

算法复杂度

时间复杂度:平均O(n^2),最好O(n), 最坏O(n^2)
空间复杂度:O(1)

插入排序动图

 C代码

void insertsort(int array[],int len){
	int i,j;
	//第一个for循环 遍历无序序列 
	for(i=1;i<len;i++){  //从数组的第二个元素开始依次遍历无序序列 
	 	int tem = array[i];  //临时保存将要排序的元素 
	 	//第二个for循环遍历有序序列 
	 	for(j=i-1;tem<=array[j]&&j>=0;j--){  //将待排序元素依次和有序序列中的元素比较 
	 		//待排序元素 小于 有序序列中当前元素时 将该元素后移
	 		array[j+1] = array[j];
	 	}
	array[j+1] = tem;  //待排序元素 大于 有序序列最后一个元素 直接将该元素插入到有序序列最后 
	}
	printf("\n排好了!\n\n");
}

念念不忘,必有回响

猜你喜欢

转载自blog.csdn.net/qq_52213943/article/details/126217194