直接插入排序基本思想及代码实现●六个人主页:你帅你先说.
●欢迎点赞关注收藏
●既选择了远方,便只顾风雨兼程。
●蘭欢迎大家有问题随时私信我!
●類版权:本文由[你帅你先说.]原创,CSDN首发,侵权必究。
直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列
实际中我们玩扑克牌时,就用了直接插入排序的思想
諾图解过程
假设有一个大小为9的数组a。x保存的是end的下一个数。
如果a[end]的值大于x,用a[end]的值覆盖掉a[end+1]的值,然后end--,若a[end]的值还是大于x,继续用a[end]的值覆盖掉a[end+1]的值,直到a[end]的值小于x时退出循环,a[end+1]的值用x覆盖。
动图演示:
:循环的终止条件不是i
代码实现:
void InsertSort(int* a, int n) { assert(a); for (int i = 0; i < n - 1; ++i) { // 将x插入[0, end]有序区间 int end = i; int x = a[end+1]; while (end >= 0) { if (a[end] > x) { a[end + 1] = a[end]; end--; } else { break; } } a[end + 1] = x; } }
我们发现插入排序的时间复杂度是O(
N
2
N^{2}
N2),这个效率是不高的,那为什么我们还要介绍这个排序?实际上插入排序在针对于接近于有序序列的排序的效率是很高的,时间复杂度为O(N)。
諾諾諾諾諾諾諾諾諾諾諾諾諾諾諾諾諾諾
觉得写的不错可以给个一键三连 点赞关注收藏
諾諾諾諾諾諾諾諾諾諾諾諾諾諾諾諾諾諾
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)