约定:

  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. 【原译】简单的Malloc实现
  2. 4'.deploy.prototxt
  3. 简单的面试题简解思路(搜集)
  4. mysql自定义存储过程_MySQL自定义函数、触发器、存储过程
  5. 全链路压测平台(Quake)在美团中的实践
  6. 多路开关模式的switch语句
  7. 关于 Mac 激活锁
  8. live2dmesh渲染优先级_如何渲染Live2D模型
  9. 华北水利水电大学历年c语言试题,一百题C语言试题
  10. Android 7.1 设置不支持遥控操作?
  11. 全国三级城市联动 js版
  12. Testbench的激励添加和书写技巧
  13. 0xff到底是多少(0x是16进制,f对应11111,因此是11111111,也就是2的8次方-1=255)
  14. 公众平台 python_微信公众平台SDK Python
  15. 我用Python模拟了谷爱凌的凌空一跃
  16. 工程图学及计算机绘图第二版答案,工程图学及计算机绘图第3版答案
  17. cstring与string区别联系
  18. 直播:Phoenix 全局索引原理与实践
  19. LQ0018 顺子日期【枚举+日期】
  20. 陈泽天 java_百名“程序猿”捉对较量 600组小分队远程亮剑

热门文章

  1. Java-虚拟机-局部变量表
  2. 此计算机上的windows防火墙阻止了远程调试_除了防火墙,用PowerShell命令也可以屏蔽网站,这个方法更简单...
  3. 服务器和硬盘如何区分,服务器硬盘和普通硬盘区别介绍
  4. 国产441b电子计算机,国产441B晶体管计算机文档(讲义)
  5. 从浏览器输入地址到渲染出网页这个过程发生了什么?
  6. linux驱动开发框架
  7. 查询集 QuerySet
  8. CSS魔法堂:hasLayout原来是这样!
  9. 【MVC+MySQL+EntityFramework】查询性能优化笔记
  10. F - Warm up - hdu 4612(缩点+求树的直径)