约定:

  1. 假设数据中有n个数据元素(关键字)。排列算法中,将序列中各关键字值依次存放于类型为keytype的数组元素K[1], K[2], K[3], …, K[n]中。
  2. 排序结果按照数据元素(关键字)值的大小,从小到大排序。

插入排序法

核心思想:第 i 趟排序将序列中第 i+1 个元素 ki+1 ( i = 1, 2, …, n-1 ) 插入到一个已经按值有序的子序列 ( k’1, k’2, k’3, …, k’i ) 的合适位置,得到一个长度为 i+1 且仍然保持按值有序的子序列 ( k’‘1, k’‘2, k’‘3, …, k’‘i, k’'i+1 )。

/**
插入排序法从小到大排序
*/
void INSERTSORT(keytype K[], int n)
{int i, j;keytype temp;for (i=2; i<=n; i++) {temp = K[i];j = i-1;while (j>0 && temp<K[j])K[j+1] = K[j--];K[j+1] = temp;}
}

折半插入排序法

折半插入排序法事实上是将折半查找法插入排序法结合在一起。故这里我们先介绍折半查找法。

折半查找法

折半查找法也可称为二分查找法,是在排序连续顺序文件中将要查找的关键字值与当前查找范围内位置居中的记录的关键字的值进行比较。
若匹配,则查找成功,给出被查到的记录在文件中的位置,查找结束。
若要查找的关键字值小于位置居中的记录的关键字值,则到当前查找范围的前半部分重复上述查找过程,否则,到当前查找范围的后半部分重复上述查找过程,直到查找成功或失败。若查找失败,则给出信息0。
注:折半查找法只能用于排序连续顺序文件!

变量
变量 含义
n 排序连续顺序文件中记录的个数
low 当前查找范围内第一个记录在文中的位置 ,初值 low=1
high 当前查找范围内最后那个记录在文件中的位置, 初值 high=n
mid 当前查找范围内位置居中的那个记录在文件中的位置
折半查找法非递归算法
int BIN_SEARCH(keytype key[], int n, keytype k)
{int low = 1, high = n, mid;while (low <= high) {mid = (low + high) / 2;if (key[mid] == k)return mid;             // 查找成功if (k > key[mid])low = mid + 1;         // 查找范围缩小到后半部分elsehigh = mid - 1;          // 查找范围搜小到前半部分}return 0;                        // 查找失败
}
折半查找法递归算法
int RECUR_BIN_SEARCH(keytype key[], int low, int high, keytype k)
{int mid;if (low > high)return 0;else {mid = (low + high) / 2;if (key[mid] == k)return mid;if (k > key[mid])return RECUR_BIN_SEARCH(key, mid+1, high, k);elsereturn RECUR_BIN_SEARCH(key, low, mid-1, k); }
}

折半插入排序法

void BIN_INSERTSORT(keytype K[], int n)
{int i, j, low, high, mid;keytype temp;for(i=2; i<=n; i++) {temp = K[i];low = 1;high = i - 1;while (low <= high) {mid = (low + high) / 2;if (temp < key[mid])high = mid - 1;elselow = mid + 1;}                           // 采用折半查找方法确定K[i]的合适位置for (j=i-1; j>=low; j--) K[j+1] = K[j];            // 有关元素依次后移一个位置K[low] = temp;              // 插入K[i],至此一趟结束}
}

排序算法(一)--插入排序法折半插入排序法相关推荐

  1. 经典排序算法(4)——折半插入排序算法详解

    折半插入排序(Binary Insertion Sort)是一种插入排序算法,通过不断地将数据元素插入到合适的位置进行排序,在寻找插入点时采用了折半查找. 一.算法基本思想 (1)基本思想 折半插入排 ...

  2. 排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序...

    先推荐一篇关于排序算法的文章:http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html 本文思路部分来源于上篇文章,但测得的结果似乎 ...

  3. java 快速排序算法简单_排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序......

    先推荐一篇关于排序算法的文章:http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html 本文思路部分来源于上篇文章,但测得的结果似乎 ...

  4. 数据结构之插入排序:折半插入排序算法

    排序算法:折半插入排序算法 思维导图: 折半插入排序算法的定义: 折半插入排序算法的原理: 折半插入排序算法的代码实现: 折半插入排序算法的性能: 思维导图: 折半插入排序算法的定义: 插入排序时查找 ...

  5. 四种常见排序算法的对比和总结 插入排序、归并排序、快速排序、堆排序

    目录 一.排序算法的时间复杂度 二.排序算法是否是原地排序 三.排序算法的额外空间 四.排序算法的稳定性 Stable 五.总结 这里我们要总结的排序算法主要有4个,分别是插入排序Insertion ...

  6. 插入排序(直接插入排序,折半插入排序,希尔排序)

    直接插入排序算法思想:从第二个元素开始,依次将后面元素插入前面已经排序好的序列. 折半插入排序算法思想:从第二个元素开始,依次将后面元素插入前面已经排序好的序列(与直接插入排序不同的是寻找插入位置使用 ...

  7. 简单入门排序算法(直接插入排序,折半插入排序,希尔排序,冒泡排序,堆排序,归并排序)

    预备知识(排序数组的创建20,100 ,500 个随机数进行排序) "Struct.h" #pragma once #include<iostream> #includ ...

  8. C语言实现各个排序算法(直接插入排序,折半插入排序,希尔排序,冒泡排序,简单选择排序)

    数据结构开发总结报告 --内部排序综合设计程序的编程实现 #include<stdio.h> #define MaxSize 20 #include<windows.h> ty ...

  9. 直接插入排序,折半插入排序,希尔排序,简单选择排序,冒泡排序,快速排序模板以及比较次数与移动次数的分析,折半搜索算法模板

    #include<stdio.h> #include<time.h> #include <stdlib.h>const int maxx=1e2+1; int a[ ...

最新文章

  1. 实时语义分割ENet
  2. 生产系统支撑终端故障处理的三个误区
  3. mysql悲观锁总结和实践--转
  4. 信息化之路------广州行
  5. JAVA读取本地图片并展示
  6. 【摘转留用】35前要考虑的
  7. java 无锁框架_高性能无锁并发框架 Disruptor,太强了!
  8. jinfo命令 Java Configuration Info
  9. 好程序员分享Web前端知识之HTML
  10. MSDN精选:Lambda 表达式(C# 编程指南)
  11. Tableau 发布到tableau online错误
  12. 小米平板2刷哪个系统更流畅_教程:小米平板2轻松刷Win10
  13. 常见计算机英语词汇翻译,常见计算机英语词汇翻译_0.doc
  14. 电商管理系统微服务架构图
  15. 【数字设计与计算机体系结构】2021-09-26-数字设计与计算机体系结构课程(四)
  16. html 360登录自动填写,怎么让360安全浏览器记住以前登陆过的帐号和密码,每次都填很麻烦...
  17. Intel VT-d(1)- 简介
  18. 如何批量修改文件夹中的照片名称
  19. 虚拟机的桥接模式和NAT模式
  20. Web前端大作业—个人网页(html+css+javascript)

热门文章

  1. 荒野行动系统推荐观战榜_荒野行动如何进行观战 荒野行动观战系统使用详解...
  2. fonts.googleapis.com加载过慢导致的项目启动过慢的问题
  3. win2016开启ntp_Windows服务器开启NTP服务
  4. 深度学习backbone是什么意思_CNN是靠什么线索学习到深度信息的?——一个经验性探索...
  5. js中的关键子in的使用方法
  6. 1-添加自己的Lua执行函数(ESP8266-SDK开发(lua版本))
  7. CSU 1803 2016(数论)
  8. 重新打包版Inno Setup 5.4.3
  9. 高强度的加密软件怎么制作
  10. 【Vue2.0】— 组件的自定义事件(十八)