数据结构->直接插入排序
数据结构->直接插入排序
实现效果
从小到大排序
算法原理
有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序.
算法步骤
- 从第一个元素开始,该元素可以认为已经被排序.
- 取出下一个元素,在已经排序的元素序列中从后向前扫描.
- 如果该元素(已排序)大于新元素,将该元素移到下一位置.
- 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置.
- 将新元素插入到下一位置中.
- 重复步骤2.
时间复杂度
如果目标是把n个元素的序列升序排列,那么采用插入排序存在最好情况和最坏情况,最好情况就是,序列已经是升序排列了,在这种情况下,需要进行的比较操作需(n-1)次即可.最坏情况就是,序列是降序排列,那么此时需要进行的比较共有n(n-1)/2次.插入排序的赋值操作是比较操作的次数加上 (n-1)次.平均来说插入排序算法的时间复杂度为O(n^2),因而,插入排序不适合对于数据量比较大的排序应用.但是,如果需要排序的数据量很小,例如,量级小于千,那么插入排序还是一个不错的选择.
空间复杂度
直接插入排序只有需要一个临时变量存储将要插入的数据,因此空间复杂度为o(1).
算法稳定性
直接插入排序是在一个已经有序的小序列的基础上,一次插入一个元素.当然,刚开始这个有序的小序列只有1个元素,就是第一个元素.比较是从有序序列的末尾开始,也就是想要插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面,否则一直往前找直到找到它该插入的位置.如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面.所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序,所以插入排序是稳定的。
代码
int temp ;
int array[10] = {9,8,7,6,5,4,3,2};
int j;
for(int i=1;i<8;i++)//循环从第2个元素开始
{
if(array[i] < array[i-1])
{
temp = array[i];
for(j = i-1;j >= 0 && array[j] > temp;j--)
{
array[j+1]=array[j];
}
array[j+1]=temp;//此处就是a[j+1]=temp;
}
}
for (int i = 0; i < 8; i ++) {
printf("%d\n",array[i]);
}
数据结构->直接插入排序的更多相关文章
- c语言数据结构之 插入排序
算法:从第二个元素开始,与前一个元素进行比较,如果小于前一个元素,两者交换位置,一直循环到不再小为止 编译器:VS2013 代码 #include "stdafx.h"#inclu ...
- D&F学数据结构系列——插入排序
插入排序(insertion sort) 插入排序由P-1趟(pass)排序组成.对于P=1趟到P=N-1趟,插入排序保证从位置0到位置P-1上的元素为已排序状态.插入排序利用了这样的事实:位置0到位 ...
- 数据结构 - 表插入排序 具体解释 及 代码(C++)
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012515223/article/details/24323125 表插入排序 具体解释 及 代码 ...
- python数据结构之插入排序
插入排序(英语:Insertion Sort)是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,在从后向前扫描 ...
- 数据结构 - 2-路插入排序 具体解释 及 代码(C++)
2-路插入排序 具体解释 及 代码 本文地址: http://blog.csdn.net/caroline_wendy/article/details/24267679 2-路插入排序的思想非常有意思 ...
- golang数据结构之插入排序
//InsertSort 插入排序 func InsertSort(arr *[]int) { ; i < len(arr); i++ { insertVal := (*arr)[i] inse ...
- hdu 2019:数列有序!(数据结构,直接插入排序+折半插入排序)
数列有序! Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submiss ...
- 排序-InsertSort
数据结构之插入排序 参考----王道论坛2015年数据结构联考复习指南---- 算法稳定性:如果待排序表中有任意两个元素x1,x2相等,且排序前x1在x2的前面,使用某个排序算法之后,若x1仍然在x2 ...
- 部分NLP工程师面试题总结
面试题 https://www.cnblogs.com/CheeseZH/p/11927577.html 其他 大数据相关面试题 https://www.cnblogs.com/CheeseZH/p/ ...
随机推荐
- 【开源】OSharp框架解说系列(5.1):EntityFramework数据层设计
OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...
- 如何搭建Percona XtraDB Cluster集群
一.环境准备 主机IP 主机名 操作系统版本 PXC 192.168.244.146 node1 ...
- WebWorker的importScripts方法
简述 在<JavaScript高级程序设计(第三版)>中,提到WebWorker的importScripts方法是异步执行的,然而在 另一本书<Javascript权威指南>中 ...
- 1Z0-053 争议题目解析486
1Z0-053 争议题目解析486 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 486.You execute the following Recovery Manager (R ...
- 解读SDN的东西、南北向接口
北向接口(Northbound Interface)是为厂家或运营商进行接入和管理网络的接口,即向上提供的接口. 南向接口(Southbound Interface)是提供对其他厂家网元的管理功能,支 ...
- 用CS的思维可以指导BS的项目吗?
最近项目上线,越来越觉的让人不爽.1.在录数据的界面领导要求用Enter键一路打下来,用户不用操作鼠标数据就可以录完. 2.CS的项目中用快捷键的确很方便,但是大家在BS的项目中也用快捷键吗? 反正我 ...
- 切分 Tomcat 的 catalina.out 文件,解决日志文件过大的问题
原文:http://unmi.cc/split-tomcat-catalina-out-file Linux 下使用 cronolog 工具来切分 catalina.out 这里重点介绍这种方法,具体 ...
- 以太坊智能合约Hello World示例程序
简介 以太坊(Ethereum)是一提供个智能合约(smart contract)功能的公共区块链(BlockChain)平台. 本文介绍了一个简单的以太坊智能合约的开发过程. 开发环境 在以太坊上开 ...
- Oracle Client安装与基本配置
1. 安装Oracle Client, 访问Oracle站点下载Oracle Database 11g Release 2 Client 或者(直接下载Oracle 11gR2 Client) 2. ...
- 那些年我们用过的Python代码
根据正则表达式选择性解压文件 from zipfile import ZipFile import re def is_match(expression, filename): pattern = r ...