插入排序InsertSort
插入排序将元素依次插入到已经排好序的序列中。
基本原理:
插入排序从序列第二个元素开始寻找合适位置然后插入到前面元素组成的序列中。
每次元素插入前,序列有序。
插入后,序列依旧有序。
因为插入时会与前面已序的元素进行比对。找到应该插入的位置,移动元素,空出该位置,再将该元素插入到序列中。
void InsertSort(int* pData, int num)
{ // i标识需要插入的元素for (int i = 1; i < num; ++i){ // j标识i前面的元素for (int j = 0; j < i; ++j){if (pData[j] > pData[i]){int temp = pData[i];// 依次后移元素,空出j空间for (int k = i; k > j; --k)pData[k] = pData[k - 1];// 将元素插入pData[j] = temp;}}}
}
上面的InsertSort嵌套有点多,可以修改为:
void InsertSort(int* pData, int num)
{ // i标识需要插入的元素for (int i = 1; i < num; ++i){ int j = 0;while (j < i && pData[j] < pData[i])++j;// 当前元素未找到插入位置,进行下一轮if (j == i)continue;// 找到插入位置,由j标识int temp = pData[i];// 依次后移元素,空出j空间for (int k = i; k > j; --k)pData[k] = pData[k - 1];// 将元素插入pData[j] = temp;}
}
插入排序InsertSort相关推荐
- 快速排序(quickSort) 和 插入排序(insertSort)
1.快速排序(quickSort) (1)在数据集之中,选择一个元素作为"基准"(pivot). (2)所有小于"基准"的元素,都移到"基准" ...
- 数据算法之插入排序(insertSort)的Java实现
本文的代码来自于<数据结构与算法(JAVA语言版)>,是笔者在网上找到的资料,非正式出刊版物.笔者对代码一些比较难以理解的部分添加了注释和图解,欢迎大家来讨论. 插入排序方法的思想是,先以 ...
- 【排序算法全解】之 - 插入排序(InsertSort)
目录 1.算法原理 2.分析过程和代码实现 2.1.排序趟数 2.2.每趟排序过程 3.改进与优化 3.1.改进的方法 3.2.改进前后对比测试 4.算法复杂度分析 1.算法原理 把第一个元素当成有序 ...
- Java【快速排序、插入排序、简单选择排序...】【八大排序-综合实验】
目 录 1.快速排序 1.1.概念+举例 1.2.完整代码 2.插入排序 2.1.概念+举例 2.2.完整代码 3.简单选择排序 3.1.概念+举例 3.2.完整代码 4.3种排序-综合代码 4. ...
- 73-插入排序——直接插入排序
1. 插入排序 插入排序的基本思想:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子表中的适当位置,直到全部记录插入完成为止. 2. 直接插入排序 假设待排序的记录存放在数组R[ ...
- 插入排序与选择排序的比较
插入排序insertsort的基本思想为每一位上的数字都与它前面的每个数字进行比较(顾名思义为把数组上的每一位数字都与其前面的数字进行比较并插入合适的位置),若前面的一个数字比它大,则交换它们两个的位 ...
- python排序算法-插入排序
直接插入排序核心思想:将需要排序的序列分为两个部分,前面部分是排序好的,后面部分是未排序的,每轮从未排序的部分钟取出一个数,然后通过比较大小把他插入到指定位置,每插入一个数后,排序好的部分则增加一个数 ...
- 排序算法的实现。用C语言编程实现冒泡排序、选择排序、插入排序、shell排序、快速排序、堆排序算法、归并排序。利用随机函数产生N个随机整数(10000以上)。
#include<stdio.h> #include <time.h> #include<stdlib.h> #define N 10000 double T, T ...
- java 用递归实现插入排序
步骤都再注释里 其实插入直接用循环做就可.但是用递归做可以锻炼下思维~ public class HowToCreateRecursion {/** 这个题是"倒着写",正着实现* ...
- 七大排序算法—图文详解(插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序)
作者:渴望力量的土狗 博客主页:渴望力量的土狗的博客主页 专栏:数据结构与算法 工欲善其事必先利其器,给大家介绍一款超牛的斩获大厂offer利器--牛客网 点击免费注册和我一起刷题吧 目录 插入排序: ...
最新文章
- 关于iOS知识的提升
- Java 接口小总结;
- springsecurity-sample中hsqldb的使用注意
- 使用WINPE在硬盘安装WIN7系统
- API Gateway——KONG简单入门
- debian查看ip地址命令_鲜为人知而又实用的 Linux 命令大全
- 对JDBC操作数据库的简单封装
- Open3d之内部形状描述子ISS
- Vue cli3使用vue-awesome-swiper
- cmd下运行Oracle清屏命令
- [模板] 球 体积交 体积并
- 网络研讨会|为什么在开发流程中应用静态代码分析工具?
- python打开xlsm_关于python:如何使用openpyxl使用Macro保存XLSM文件
- java中无法解析的编译问题怎么解决,java.lang.Error: 无法解析的编译问题
- FPGA实现HDMI接口
- type是python保留字_Python保留字总结
- 英语发音规则---Q字母
- 互联网测试校招系列2:准备越充分,机会越大!
- 英语单词:profile
- 运维面临的主要安全威胁介绍
热门文章
- spring session 考虑问题解答
- Soft-Skills-software-developers-manual
- 创建,删除和移动文件夹以及文件夹列表
- 59. 预定义超全局变量
- 2. 配置Xdebug
- Mybatis中javaType和jdbcType对应和CRUD例子
- [bzoj2002][Hnoi2010]Bounce 弹飞绵羊(LCT)
- Linux安装配置redis 、启动redis、redis设置密码
- Set和Map的区别 (@es6)
- 快速定位iOS线上BUG在哪个控制器崩溃