C语言--八大排序之直接插入排序算法
排序:把无序的数据变得有序,默认升序。(笔试面试排名第一的内容)
1.直接(简单)插入排序(例如:扑克牌发牌时,每发一张,将牌有序插入)
从当前位置开始, 从后往前找比当前数字小的, 找到后插入到这个小的数字后面;
在找的过程中, 如果发现一个比当前数字大, 同时将这个数字往后挪;
特点:1.越有序越快,完全有序的时间复杂度为:O(n),(非常重要,这个是希尔排序的基础),
2.如果碰见一个和插入元素相等的元素,那么把插入元素放在相等元素的后面,即就是想等元素的先后顺序并没有改变,所以插入排序是一个稳定的排序。
代码实现如下:
#include <stdio.h>void InsertSort(int* arr, int len)//O(n^2),最好的情况,O(1),
{int tmp;//存放当前处理的数字int j;for (int i = 1; i < len; i++)//从第二个数字开始{//1 2 3 4 5tmp = arr[i];for (j = i - 1; j >= 0; j--)//从后往前找第一个比tmp小的数字{if (arr[j] > tmp)//arr[j]需要后移arr[j + 1] = arr[j];elsebreak;}arr[j + 1] = tmp;}
}//打印函数
void show(int* arr, int len)
{for (int i = 0; i < len; i++){printf("%d ", arr[i]);}printf("\n");
}int main()
{int arr[] = { 4,6,2,8,9,0,1,7,3,5 };InsertSort(arr, sizeof(arr) / sizeof(arr[0]));show(arr, sizeof(arr) / sizeof(arr[0]));return 0;
}
运行结果:
C语言--八大排序之直接插入排序算法相关推荐
- (C语言)八大排序之:插入排序、冒泡排序、选择排序
1 /* 2 * FILE: p198_sort.c3 * DATE: 201801144 * --------------5 */6 7 #include <stdio.h>8 9 /* ...
- C语言八大排序算法,附动图和详细代码解释!
文章来源:电子工程专辑.C语言与程序设计.竹雨听闲 一.前言 如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功. 想写出精炼.优秀的代码,不通过不断的锤炼,是很难做到的. 二. ...
- 硬核!C语言八大排序算法,附动图和详细代码解释!
来源 :C语言与程序设计.竹雨听闲等 一 前言 如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功. 想写出精炼.优秀的代码,不通过不断的锤炼,是很难做到的. 二 八大排序算法 ...
- 序列划分c语言,一篇“get”C语言八大排序算法
如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功. 想写出精炼.优秀的代码,不通过不断的锤炼,是很难做到的. 二.八大排序算法 排序算法作为数据结构的重要部分,系统地学习一下是 ...
- c语言的八大排序算法,程序员的内功:C语言八大排序算法
四 一.冒泡排序 冒泡排序算法的运作如下: ●比较相邻的元素.如果第一个比第二个大,就交换他们两个. ●对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.这步做完后,最后的元素会是最大的数. ...
- “手把手”教你C语言八大排序
C语言八大排序详解 目录 排序的概念及其应用 常见的八大排序算法 直接插入排序 直接插入排序代码实现 直接插入排序算法时间复杂度及稳定性分析 希尔排序 希尔排序代码实现 希尔排序算法时间复杂度及稳定性 ...
- C语言八大排序算法【详细 代码+图文】
这里写目录标题 1.冒泡排序 1.1 冒泡排序的思想 1.2 冒泡排序的实现 2.选择排序 2.1 选择排序的思想 2.2 选择排序的实现 3.直接插入排序 3.1 直接插入排序的思想 3.2 直接插 ...
- c语言顺序查找算法,c语言实现排序和查找所有算法
c语言版排序查找完成,带详细解释,一下看到爽,能直接运行看效果. /* Note:Your choice is C IDE */ #include "stdio.h" #inclu ...
- 简单选择排序_一文带你读懂排序算法(一):冒泡 amp; 快速选择排序 amp; 简单插入排序算法...
点击上方「蓝字」关注我们 排序是确保数据规则有序的有效手段.日常开发里,我们常用到的是"冒泡"."插入排序"."选择排序"三种.大部分情况下 ...
最新文章
- [UOJ422]小Z的礼物
- muduo之mutex和condition
- 创建MySQL数据库中useUnicode=truecharacterEncoding=UTF-8
- wpf 如何设置弹出窗口必须关闭才能打开其他软件_Mac忘记登录密码?以防万一,必须收藏。...
- python模仿windows文件管理_python – 在Windows中显示文件的资源管理器属性对话框...
- 漫谈 C++ 的各种检查
- 一步步使SSH连接您的github仓库
- vue中通过js控制页面样式方法
- python 除数总是提示为0_python负数求余不正确?——取模 VS 取余
- 查看grafana版本_使用 Prometheus 与 Grafana 为 Kubernetes 集群建立监控与警报机制
- 特斯拉加州工厂无视禁令强行复工,马斯克:要抓就只抓我
- 大数据之-Hadoop3.x_MapReduce_ReduceTask源码解析---大数据之hadoop3.x工作笔记0127
- 微单相机和单反相机的区别?摄影入门第一课
- DB2 windows下9.5安装教程
- 丁林松老师的QT视频及教程源码
- 【续】我的FLASH情结2010——浅谈FLASH WEB GAME与创业
- Internal error: : 8 [#1] PREEMPT SMP ARM,vmlinux反汇编命令调试查找错误的步骤
- 建议71:区分异步和多线程应用场景
- WUST2020部分WP
- c语言printf( aaa ),有大佬知道那里错了吗。aaa=jia();那报错了#incl
热门文章
- 基美|新型小体积电感器磁芯
- 集合--ArrayList类、Vector类、LinkedList类、List集合练习
- 专访 | 杨强教授谈CCAI、深度学习泡沫与人工智能入门
- 【软件测试】APP自动化测试面试题,含答案
- 华为OD机试 - 免单统计(Java JS Python)
- Day5:Java基础语法学习6.9
- 以下数据结构中,()是非线性数据结构
- excel解决计算机背包,不是专业做包,也有出彩地方——MAMMUT EXCELRON LMNT 30L双肩包...
- 卸载完应用,无法删除残留文件
- MAC电脑SecureCRT配色方案