插入排序——直接插入排序
【基本思想】:顺序的把待排序的数据元素按其关键字的大小插入到已排序数据元素的适当位置。自己和数据元素个数从只有一个数据元素开始,逐次增大,当子集合大小最终和集合大小相同时,排序结束。
插入排序的理解关键在于理解下面三个问题:
1.往哪里进行插入
2.把哪个值进行插入
3.怎么实现插入的
答:通过for循环从0到n-1进行遍历,前i为是排好序的,所以要进行的是将第i+1位与前i进行对比查找插入位置,在比较的时候,把前面的逐个后移,第i位覆盖第i+1位,第i-1位覆盖第i位以此类推。
void InsertSort(DataType a[],int n)
{int i,j;DataType temp;for(i = 0;i < n-1;i++){temp = a[i+1];//定位第i+1位的数据,用于查找位置后的交换,避免移位时被覆盖j = i; //用于第i+1位与前i位进行对比时的下标递减遍历。while(j > -1 && temp.key < a[j].key){a[j+1] = a[j];j--;}a[j+1] = temp;}
}
初始数组 | 64 | 5 | 7 | 89 | 6 | 24 |
第一次排序 | 5 | 64 | 7 | 89 | 6 | 24 |
第二次排序 | 5 | 7 | 64 | 89 | 6 | 24 |
第三次排序 | 5 | 7 | 64 | 89 | 6 | 24 |
第四次排序 | 5 | 6 | 7 | 64 | 89 | 24 |
第五次排序 | 5 | 6 | 7 | 24 | 64 | 89 |
红色为每次排序后前i位已排序区域,紫色位将要插入的数值
不难看出来,其最好的情况下的时间复杂度位O(n);最坏的情况下位O(n^2);
插入排序——直接插入排序相关推荐
- 王道八大排序:直接插入排序 折半插入排序 希尔排序 冒泡排序 快速排序 归并排序 基数排序
文章目录 1.插入排序 1.1直接插入排序 1.2折半插入排序 1.3希尔排序 2.交换排序 2.1冒泡排序 2.2快速排序 3.选择排序 3.1简单选择排序 3.2堆排序 4.归并排序 5.基数排序 ...
- C语言——十四种内部排序算法【直接插入排序-冒泡排序-选择排序-插入排序-希尔排序-归并排序-快速排序-堆排序-折半插入排序-二分查找-路插入排序-表插入排序-简单选择排序-直接选择排序-树形选择】
目录: 一:插入排序 A:直接插入排序 1.定义: 2.算法演示 实例1: 3.基本思想 4.排序流程图 实例1: B:希尔排序 1.定义: 2.算法演示 实例2: C:其他插入排序 a:折半插入排序 ...
- 问题 c: 插入排序_插入排序:它是什么,以及它如何工作
问题 c: 插入排序 Insertion sort is a simple sorting algorithm for a small number of elements. 插入排序是一种针对少量元 ...
- 图解插入排序--直接插入排序
排序思路:每次将一个待排序的元素与已排序的元素进行逐一比较,直到找到合适的位置按大小插入. 第一趟比较示图: 算法实现: public static void insertsort(int arr[] ...
- 插入排序 - 二分插入排序
二分插入是直接插入排序的一种优化,主要是查找方式不同. 稳定性:稳定的 时间复杂度:O(n^2) public class BinaryInsertSort {public static void m ...
- python插入排序_python 插入排序,选择排序
插入排序: def insert_sort(lst): for i in range(1,len(lst)): x=lst[i] #x是一个临时变量,表示当前轮到的数字 j=i #临时变量 j ,为后 ...
- 插入排序---希尔插入排序算法(Javascript版)
取一个小于n的整数作为第一个增量,把序列分组.所有距离为增量的倍数的元素放在同一个组中.先在各组内进行直接插入排序:然后,取第二个增量(第二个<第一个)重复上述的分组和排序,直至所取的增量=1, ...
- 插入排序:直接插入排序希尔排序
一.直接插入排序 1. 思想 直接排序法, 可以分为两个部分, 一部分是有序的, 一部分是无序的. 从这个图上, 应该是能看清楚直接插入排序的思想了. 将无序部分的第一个与有序部分进行比较. 从有序部 ...
- java sort 插入排序_插入排序(insertSort)
插入排序,在数组中,保证 从位置0 到 p 位置 配上的元素都是已排序状态.每次比较 p+1 位置上的元素和已排序的列表,将 p+1 位置上的元素,加入到已排序的列表中. /** * created ...
- 常用排序算法之插入排序 ( 直接插入排序、希尔排序 )
插入排序的方法是:从初始有序的子集合开始,不断地把新的数据元素插入到已排列有序子集合的合适位置上,使子集合中数据元素的个数不断增多,当子集合等于集合时,插入排序算法结束.常用的插入排序有直接插入排序和 ...
最新文章
- bat curl 返回值_bat curl 发送http请求 监控网站
- Android使用BroadCastRecevier广播实现接收短信,并利用Toast弹出显示内容
- java for(o t :object) 获取顺序号_java中线程的生命周期
- NFS 网络文件系统
- LUA使用虚函数与使用回调函数
- d3.js 实现烟花鲜果
- 前端、后台和连接前端后台的网络数据传输
- lintcode:子数组之和为0
- 如何做到免驱打印_创想三维:3D打印机制造光感护眼台灯
- 浏览器异步加载和同源策略
- UVALive - 7147 (数学)
- jpg和tif转pdf遇到的问题和解决方法
- http请求过程及性能优化分析
- 路由器wan口认证断开服务器无响应,路由器WAN口设置已断开(服务器无响应)的解决方法...
- OkHttp证书校验
- 什么是CISSP(国际注册信息安全认证专家)?
- 计算机基础2008版,《计算机基础(2008版)》第4次作业
- 黑盒测试、灰盒测试、白盒测试、单元测试是什么?它们有什么区别?
- dockers 后台启动
- CMWAP 和 CMNET 的区别是什么?
热门文章
- Unity2018灯光烘培
- PDF转换PPT方法讲解
- 生成毛笔字体图片http://i-gccs.fst.umac.mo/gccs/big5_dict.php
- 这次引起程序员恐慌的竟然是网易云音乐
- 40 岁的中年失业人怎么活下去?,android开发环境搭建
- 用VB代码把4位数字转化为汉字数字
- 【iOS工具】注释插件 VVDocumenter-Xcode 的安装使用及误点击“Skip Bundle”的解决办法!...
- File zilla远程连接服务器报错:服务器发回了不可路由的地址,使用服务器地址代替
- swoole一键携程化mysql_【SWOOLE系列】浅淡SWOOLE协程(二) 一键协程化
- 图像处理:单通道转为3通道