博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
直接插入排序(带哨兵和不带哨兵)
阅读量:5213 次
发布时间:2019-06-14

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

前言

插入排序(insertion sort)的基本思想:每次将一个待排序的记录,按其关键字大小插入到前面已经排序好的序列中,直到全部记录插入完成为止.

 

直接插入排序

基本思想

假设待排序的记录存放在数组R[1..n]中。初始时,R[1]自成1个有序区,无序区为R[2..n].从i = 2起直到i = n 为止,依次将R[i]插入当前的有序区R[1..i - 1]中,生成含n个记录的有序区.
 

排序方法

将待插入记录R[i]的关键字从右向左依次与有序区中记录R[j](j=i - 1, i - 2, ....,1)的关键字比较:
  1. 若R[j]的关键字大于R[i]的关键字,则将R[j]后移一个位置
  2. 若R[j]的关键字小于或等于R[i]的关键字,则查找过程结束,j + 1即为R[i]插入位置
关键字比R[i]的关键字大的记录均已后移,所以j + 1的位置已经腾空,只要将R[i]直接插入到此位置即可完成一趟直接插入排序
 

c语言实现代码

InsertSort.c

#include
typedef int ElementType;ElementType arr[10]={
2,87,39,49,34,62,53,6,44,98};ElementType arr1[11]={
0,2,87,39,49,34,62,53,6,44,98};//不使用哨兵,每一次循环需要比较两次void InsertSort(ElementType A[],int N){ int i,j; ElementType temp; for(i=1;i
0;j--) { if(A[j-1]>temp) A[j]=A[j-1]; else break; } A[j]=temp; }}/*使用A[0]作为哨兵,哨兵有两个作用:1 暂时存放待插入的元素2 防止数组下标越界,将j>0与A[j]>temp结合成只有一次比较A[j]>A[0], 这样for循环只做了一次比较,提高了效率,无哨兵的情况需要比较两次,for循环有两个判断条件*/void WithSentrySort(ElementType A[],int N){ int i,j; for(i=2;i
A[0];j--) { A[j+1]=A[j]; } A[j+1]=A[0]; }}void Print(ElementType A[],int N){ int i; for(i=0;i

运行结果如下:

转载于:https://www.cnblogs.com/wuchanming/p/3812338.html

你可能感兴趣的文章
Appium+python自动化-Android夜神模拟器
查看>>
异常处理:try - except 和 try finally。
查看>>
创建自己的github仓库
查看>>
建造者模式(Builder Pattern)
查看>>
Oracle PL/SQL编程语法
查看>>
pdf文件如何转换成cad格式文件
查看>>
单点登录实现机制:桌面sso
查看>>
团队开发需求分析简介
查看>>
bzoj3931: [CQOI2015]网络吞吐量
查看>>
Ok6410裸机驱动学习(二)ARM基础知识
查看>>
git删除本地保存的账号和密码
查看>>
scrapy之Selectors
查看>>
另一个 OleDbParameterCollection 中已包含 OleDbParameter 错误分析及解决办法
查看>>
SQL Server技术问题之索引优缺点
查看>>
LBS上传到百度地图
查看>>
linux结束一个运行超10分钟的进程
查看>>
leetcode Count and Say python
查看>>
微信小程序--每个独立的page的page.json只能修改window属性
查看>>
回顾装饰模式
查看>>
Sring容器技术内幕之InstantiationStrategy类介绍
查看>>