博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构笔记----图解插入直接排序算法及其改进形式
阅读量:3906 次
发布时间:2019-05-23

本文共 597 字,大约阅读时间需要 1 分钟。

insertsort

算法思想:将待排序的记录按大小插入已经排序好的子序列中

算法分析:
时间复杂度O(n^2)
空间复杂度O(1)
稳定的算法
适用于顺序存储和链式存储的线性表
特点:可以提前终止循环,在数据基本有序时效率很高
应用:在复杂排序中作为一个子过程 来优化

void InsertSort(elemtype *a,int n){//逆序	for(int i=1;i
0&&a[j]>a[j-1];j--){//简洁写法 int temp = a[j-1]; a[j-1] = a[j]; a[j] = temp; }}

部分过程图示

在这里插入图片描述
5>2交换位置,j从开始递减直到1

在这里插入图片描述

12>2,交换位置,j–
在这里插入图片描述12>5,交换位置
在这里插入图片描述
改进插入算法
添加哨兵,每次比较不交换位置,而是向后赋值,将哨兵保存的元素插入合适的位置
主要改进点:赋值次数减少了,(因为交换需要赋值三次)

void BetterInsertSort(elemtype *a,int n){	for(int i=1;i
0&&a[j-1]

还是以这个为例

在这里插入图片描述
第一步不动
在这里插入图片描述
5比2大,因为逆序,所以5不在正确的位置上,把2赋给第2个元素
在这里插入图片描述
5比第1个元素大,将guard保存的元素赋给第一个元素
在这里插入图片描述
12>5>2,所以5,2,12都不在正确的位置上
在这里插入图片描述
12比第一个元素还大
在这里插入图片描述
12>7>5>2
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

转载地址:http://lrqen.baihongyu.com/

你可能感兴趣的文章
【vue学习】—slot插槽的使用
查看>>
怎样做研究
查看>>
labview 局部变量问题
查看>>
labview 循环外部与数组相连时问题
查看>>
哈佛大学凌晨4点半的景象--哈佛图书馆的二十条训言
查看>>
Outlook2010到处通讯录
查看>>
Gmail导入通讯录
查看>>
小米笔记本安装Win 10历程
查看>>
【转】SLAM 论文阅读和分类整理
查看>>
【转】Ubuntu 16.04 重置密码(忘记密码)
查看>>
【转】信息奥赛一本通1185:单词排序(OJ题目描述有问题)
查看>>
webclient
查看>>
从百度MP3搜索结果中提取歌曲列表
查看>>
Python Set
查看>>
SWT 中实现最小化到托盘图标,并只能通过托盘的弹出菜单关闭程序
查看>>
Java Table Examples
查看>>
Java read file
查看>>
界面主线程,子线程更新主界面控件
查看>>
敲两遍引号键才出现
查看>>
剑指Offer
查看>>