c语言——直接插入排序

插入排序就是将一个记录插入到已排好序的序列中,从而得到一个新的有序序列。

哪里有一个排好序的序列

那问题是我们要排序的是一个数组,哪里来一个排好序的序列呢?这时,我们可以把数组下标为0的元素想像成一个有序的数组,这个数组内只有他一个元素,所以,它总是有序的。后面的元素和他比较。
以升序为例

升序

//升序
void InsertSort(int arr[],int len)
{for (int i = 1; i < len; ++i){if (arr[i] < arr[i - 1]){int temp = arr[i];int j = i - 1;for (; j >= 0 && temp < arr[j]; j --){arr[j + 1] = arr[j];}arr[j + 1] = temp;}}}

运行,

4 2 8 0 5 7 1 3 9
0 1 2 3 4 5 7 8 9

降序

void InsertSort(int arr[],int len)
{for (int i = 1; i < len; ++i){if (arr[i] > arr[i - 1]){int temp = arr[i];int j = i - 1;for (; j >= 0 && temp > arr[j]; j --){arr[j + 1] = arr[j];}arr[j + 1] = temp;}}}

运行

4 2 8 0 5 7 1 3 9
9 8 7 5 4 3 2 1 0

完整代码

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>void printArray(int arr[],int len)
{for (int i = 0; i < len; ++i){printf("%d ",arr[i]);}printf("\n");
}void InsertSort(int arr[],int len)
{for (int i = 1; i < len; ++i){if (arr[i] > arr[i - 1]){int temp = arr[i];int j = i - 1;for (; j >= 0 && temp > arr[j]; j --){arr[j + 1] = arr[j];}arr[j + 1] = temp;}}}void  test()
{int arr[] = { 5, 3, 9, 2, 1, 3 };int len = sizeof(arr) / sizeof(int);printArray(arr, len);InsertSort(arr, len);printArray(arr, len);
}int main(){test();system("pause");return EXIT_SUCCESS;
}

时间复杂度

空间复杂度

直接插入排序中只使用了i,j,tmp这三个辅助元素,与问题规模无关,空间复杂度为O(1)\textit{O(1)}O(1)。

是否是稳定排序

相同元素的相对位置不变,如果两个元素相同,插入元素放在相同元素后面。是一种稳定排序。

参考

插入排序–直接插入排序

c语言——直接插入排序实现(时间复杂度与空间复杂度分析)相关推荐

  1. 冒泡、快速、选择、插入排序以及时间复杂度、空间复杂度的解析

    冒泡.快速.选择.插入排序以及时间复杂度.空间复杂度的解析 时间复杂度 时间复杂度的表示方法 时间复杂度的分析和计算方法 常见的几种时间复杂度 常见的时间复杂度排序 空间复杂度 时间复杂度的分析和计算 ...

  2. 算法时间复杂度、空间复杂度分析

    算法时间复杂度 在计算机程序编写前,依据统计方法对算法进行估算,经过总结,我们发现一个高级语言编写的程序程序在计算机上运行所消耗的时间取决于下列因素: 1.算法采用的策略和方案; ⒉编译产生的代码质量 ...

  3. 时间复杂度与空间复杂度分析

    作为开发人员,我们都希望在完成功能的基础上让代码运行的更快.更省空间,那如何衡量编写的代码是否更有效率,这就需要我们学会如何分析代码时间复杂度和空间复杂度. 什么是复杂度分析 执行时间和占用空间是代码 ...

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

    基本概念 算法:是解决某一特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示有一个或者多个操作.对于一个特定问题进行求解,可以使用不同的算法,或许最终结果是一样的,但在此过程中消 ...

  5. 递归算法时间复杂度和空间复杂度分析与举例

    文章目录 前言 1.递归算法性能分析公式 1.1 时间复杂度计算公式 1.2 空间复杂度计算公式 1.3 例子 1.3.1 暴力算法 1.3.2 递归算法 1.3.3 优化递归算法 总结 前言 根据代 ...

  6. 时间复杂度和空间复杂度分析技巧

    一.算法效率度量 如何度量一个算法的执行效率/时间呢?可以利用计算机的计时功能,来度量算法执行效率高低.这种方法也叫事后统计法. 事后统计法有很大的局限性: 测试结果依赖环境:不同的处理器.不同的操作 ...

  7. Pyhton 描述 归并排序算法详解 时间复杂度,空间复杂度分析

    算法描述分析: 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序列合并,得到完全有 ...

  8. 时间复杂度、空间复杂度的分析--王争数据结构与算法学习笔记

    我们使用时间复杂度和空间复杂度来衡量算法代码的执行效率,那么为什么要这么麻烦需要自己去衡量一遍呢?把代码跑一遍,通过统计.监控,就能得到算法执行的时间和占用的内存大小.为什么还要做时间.空间复杂度分析 ...

  9. 排序算法之 插入排序、希尔(shell)排序 及其时间复杂度和空间复杂度

    有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法--插入排序插入排序的基本操作就是将一个数据插入到已经排好序的有序数 ...

最新文章

  1. CSS3 @keyframes animate
  2. 感知机模拟或门的实现:权重和阈值的设置
  3. 四说大数据时代“神话”:从大数据到深数据\n
  4. python使用什么注释语句和运算-Python代码注释的用法和意义
  5. ajax和jsonp没有半点关系,跨域问题
  6. 在Android中实现监听 返回键,主键,菜单键
  7. 【Python基础】Python数据分析实战之分布分析
  8. 【GitHub】GitHub 的 Pull Request 和 GitLab 的 Merge Request 有区别吗?
  9. UTF-8 可变编码格式
  10. IOS15 SVProgressHUD 报UIWindow 无法识别错误
  11. 阿里Sentinel控制台源码修改-对接Apollo规则持久化
  12. UIButton设置UIControlContentHorizontalAlignment调整文字对齐方式
  13. android qq输入法表情,QQ输入法-问题反馈
  14. 实对称矩阵的一些性质(不包含证明)
  15. Windows11 VMware 此平台不支持虚拟化的 intel vt-x/ept
  16. ISP——AWB(Auto White Balance)
  17. 大文件前端直接上传至七牛
  18. Xcode及Mac快捷键
  19. 基于外卖平台POI的城市餐饮业空间热点分析系统
  20. C语言中system函数用法解释

热门文章

  1. MySQL 通过子查询批量插入数据
  2. Body estimation 论文阅读笔记(3):Unipose:Unified Human Pose Estimation in Single Images and Videos Bruno Ar
  3. 网站安全公司waf防火墙的作用分析
  4. scad的oracle性质,变量选择之SCAD算法
  5. LaTex学习教程——简单表格(三行线、普通表格)
  6. 组态王与三菱PLC编程软件GXWorks2通过OPC数据库进行动态仿真
  7. 汽车销售管理系统数据库的设计与实现
  8. 深度学习推荐系统中各类流行的Embedding方法(下)
  9. Scrapy第三(②)篇:创建scrapy项目
  10. 鸿蒙系统怎么安装网易云音乐,网易云音乐鸿蒙版 - 魔法系统之家下载