内部排序——直接插入排序
最近做一个排序中间件,所以需要研究排序算法,而且重点是要实现出来。
实现算法语言为C语言,使用环境为VS2010集成环境。
待排记录数据类型:
//数据 #define MAXSIZE 20 typedef int KeyType; typedef int InfoType; typedef struct{KeyType key; //关键字项InfoType otherinfo; //其他数据项 }RedType; //记录类型 typedef struct{RedType r[MAXSIZE+1]; //r[0]闲置或用作哨兵单元int length; //顺序表长度 }SqList; //顺序表类型
最简单的插入排序
直接插入排序:将一个记录插入到已经排好序的有序表中,从而得到一个新的,记录数字增1的有序表。
直接插入排序理论比较简单,算法也比较简单。
//插入排序 void InsertSort(SqList &L){//对顺序表L作直接插入排序for(int i=2;i<=L.length;i++){if(LT(L.r[i].key,L.r[i-1].key)){L.r[0]=L.r[i];L.r[i]=L.r[i-1];}int j=i-2;for(;LT(L.r[0].key,L.r[j].key);j--){L.r[j+1]=L.r[j];}L.r[j+1]=L.r[0];} }
函数LT(int,int)是比较的内容。根据数据类型比较,这里有一个整型大小比较的例子。
bool LT(int x,int y){if(x<y)return true;elsereturn false; }
测试
为了便已测试,下面给一个完整的测试代码
关于插入排序的效率
空间:S(1),直接插入排序只需要一个辅助空间。
时间:排序的基本炒作为,1.比较关键字的大小;2.移动记录
最好情况:当记录已经是有序而且序列就是所求顺序的时候,第二个for循环将不会被运行,整体空间复杂度为O(n)
最坏情况:当记录和需要得出的序列刚好相反时,第二个for循环被执行的次数最多,比较次数为(2,3,...,n)次,即(n+2)(n-1)/2,移动次数为(2,3,...,n,n+1),即(n+4)(n-1)/2。
平均次数大约为n2/4,即时间复杂度为O(n2)
参考资料
[1] 严蔚敏 吴伟民 《数据结构(C语言版)》 北京:清华大学出版社,1997.4
本文转自 Ron Ngai 博客园博客,原文链接:http://www.cnblogs.com/rond/archive/2012/04/16/2452729.html ,如需转载请自行联系原作者
内部排序——直接插入排序相关推荐
- 10-1-直接插入排序-内部排序-第10章-《数据结构》课本源码-严蔚敏吴伟民版
课本源码部分 第10章 内部排序 - 直接插入排序 --<数据结构>-严蔚敏.吴伟民版 源码使用说明 链接☛☛☛ <数据结构-C语言版>(严蔚敏,吴伟民版)课 ...
- prim算法适用条件_内部排序算法的比较及应用
"内部排序包括 插入排序(直接插入排序.折半插入排序.希尔排序), 交换排序(冒泡排序.快速排序), 选择排序(简单选择排序.堆排序), ...
- 内部排序算法全面总结
排序的概念 排序,就是重新排列表中的元素,使表中的元素按照关键字有序的过程. 我所了解的 表 多半是顺序表,因为顺序表实现较为简单,但是链表结构同样可以实现很多排序算法. 定义中的元素一般指什么元素呢 ...
- 内部排序与外部排序简单比较
前言 本篇文章主要介绍内部排序与外部排序的知识,如果你和我一样还不知道内部排序和外部排序为何物的话,不妨看看我的理解 正文 由于待排序的记录数量不同,使得排序过程中涉及的存储器不同,可将排序方法分为两 ...
- 直接插入排序(内部排序)
1 package com.trfizeng.insertionsort; 2 3 /** 4 * 5 * @author trfizeng 内部排序 插入排序 --- 直接插入排序(Straight ...
- 掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等)...
掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等). 数组高级以及Arrays(掌握) 排序方法 空间复杂度 时间复杂度 稳定性 插 入 排 序 ...
- 七内部排序算法汇总(插入排序、Shell排序、冒泡排序、请选择类别、、高速分拣合并排序、堆排序)...
写在前面: 排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素的随意序列,又一次排列成一个按keyword有序的序列.因此排序掌握各种排序算法很重要. 对以下介绍的各个排序,我们假定全部排 ...
- 【数据结构与算法】内部排序之一:插入排序和希尔排序的N中实现(不断优化,附完整源码)...
转载请注明出处:http://blog.csdn.net/ns_code/article/details/20043459 前言 本来想将所有的内部排序总结为一篇博文,但是随着研究的深入,还是放弃 ...
- C语言——十四种内部排序算法【直接插入排序-冒泡排序-选择排序-插入排序-希尔排序-归并排序-快速排序-堆排序-折半插入排序-二分查找-路插入排序-表插入排序-简单选择排序-直接选择排序-树形选择】
目录: 一:插入排序 A:直接插入排序 1.定义: 2.算法演示 实例1: 3.基本思想 4.排序流程图 实例1: B:希尔排序 1.定义: 2.算法演示 实例2: C:其他插入排序 a:折半插入排序 ...
最新文章
- android menu点击事件6,Android Menu
- 31312312312iiiii
- tkinter 菜单添加事件_Tasker的最新测试劫持了Android 11的电源菜单
- curPos和tgtPos
- 代码写好了怎么在php里裕兴_8 行代码用Python画一个中国地图
- java out.flush_java中基本输入输出流的解释(flush方法的使用)
- Google AdWords广告的12个技巧
- Spring Cloud 一:注册中心
- 使用MbrFix.exe修复MBR分区表
- MFC为窗口创建线程,以及线程与窗口间的通信
- matlab中的高阶导数,如何用matlab求函数的导数与高阶导数 需要技巧
- Struts2.0中ActionInvocation使用
- 支持视频语音通话的免费远程管理软件-Rd远控
- (liunx)全套青龙面板+傻妞流水版2022年8月22日更新
- 安装GitExtentions KDiff3已配置为合并工具,kdiff3的路径未配置
- FDD LTE B1是什么
- 南澳大学计算机科学专业学费,澳洲南澳大学生活费
- php 用积分兑换_PHP积分兑换接口实例_PHP
- SQL Server AlwaysOn部署
- idea Failed to clean project Failed to delete target