/*______________________________________________________________________________________________________________
文件说明:【1】根据数据元素是否完全在内存中,可以将排序算法分为两类:【内部排序】,【外部排序】【2】【内部排序】是指在排序期间元素全部存放在内存中的元素;【3】【外部排序】是指在排序期间,元素无法全部同时存放在内存中,必须在排序过程中,根据要求不断在内、外存之间移动的排序。【4】【排序】就是重新排列表中的元素,使表中的元素满足按关键字递增或递减的过程。【5】【排序算法的稳定性】如果待排序表中有两个元素Ri,Rj,其对应的关键字Keyi=Keyj,且在排序前Ri在Rj前面,如果使用某一排序算法排序后,Ri仍在Rj的前面,则称这个排序算法是稳定的,否则称该排序算法不稳定的【6】注意!!!(1)算法是否具有稳定性并不能衡量一个算法的优劣,它主要是对算法性质进行描述。(2)对于不稳定的排序算法,只需举出一组关键字的示例说明它的不稳定性即可。【7】一般情况下:内部排序算法在执行过程中都要进行两种操作:【比较】和【移动】通过比较两个关键字,确定对应的元素的前后关系,然后通过移动元素以达到有序。【8】并不是所有的内部排序算法都要基于比较操作,事实上,基数排序就不是基于比较的。
内部排序:【1】插入排序算法(1)直接插入排序(2)折半插入排序(3)希尔排序(shell sort)【2】交换排序(1)冒泡排序(bubble sort)(2)快速排序【3】选择排序(1)简单选择排序(2)堆排序【4】二路归并排序(merge sort)【5】基数排序
外部排序
______________________________________________________________________________________________________________*/
#include<iostream>
using namespace std;/*____________________________________________________________________________________________________________
【模块一】折半插入排序【函数原型】template<typename ElemType>void BinSort(ElemType array[],int iLength)
【函数说明】【1】对记录数组array做【折半插入排序】【2】iLength为记录中待排序记录的数目
【算法思想】【1】从查找算法的讨论中可知,对于【有序的顺序表】进行折半查找,其性能优于顺序查找。所以,可以将【折半查找】的思想应用在有序的记录中确认插入的位置,相应的排序算法称为【折半插入排序算法】【2】采用【折半插入排序算法】,可以减少关键字比较的次数。每插入一个元素,需要比较的次数最大折半判定树的深度。___________________________________________________________________________________________________________*/
template<typename ElemType>void BinSort(ElemType array[],int iLength)
{ElemType temp;for(int i=1;i<iLength;i++){temp      =  array[i];int iLow  =  0;int iHigh =  i-1;int iMid  = 0;while(iLow  <=  iHigh){iMid  = (iLow+iHigh)/2;if(temp <array[iMid]){iHigh  =  iMid - 1;}else{iLow   =  iMid + 1;}}for(int j=i-1;j>=iLow;j--){array[j+1]  =  array[j];}array[iLow]=temp;}
}/*____________________________________________________________________________________________________________
【主函数】控制台应用程序  我们的程序从这里开始执行
___________________________________________________________________________________________________________*/
int main()
{int array[10]={3,5,2,7,8,9,1,6,4,0};cout<<"显示需要排序的序列"<<endl;for(int i=0;i<10;i++)cout<<array[i]<<"  ";cout<<"排序的结果是:"<<endl;BinSort<int>(array,10);for(int i=0;i<10;i++)cout<<array[i]<<"  ";system("pause");return 0;
}

【数据结构----笔记4】插入排序算法之【折半插入排序算法】相关推荐

  1. 二分查找算法(折半查找算法)

    二分查找算法(折半查找算法) 二分查找又称折半查找.二分搜索.折半搜索等,是在分治算法基础上设计出来的查找算法,对应的时间复杂度为O(logn). 二分查找算法仅适用于有序序列,它只能用在升序序列或者 ...

  2. 数据算法之折半插入排序(binInsertSort)的Java实现

    本文的代码来自于<数据结构与算法(JAVA语言版)>,是笔者在网上找到的资料,非正式出刊版物.笔者对代码一些比较难以理解的部分添加了注释和图解,欢迎大家来讨论. 折半插入排序方法的思想是, ...

  3. 经典算法之折半插入排序法

    活动地址:21天学习挑战赛 文章目录 一.算法 1.算法概述 2.算法步骤 二.算法实践 1.Java代码 2.执行结果 三.复杂度分析 1.时间复杂度 2.空间复杂度 一.算法 1.算法概述 直接插 ...

  4. 数据结构笔记(三十六)-- 插入排序与直接插入排序

    插入排序 插入排序就是将要排序的表分成有序表和无序表两个部分,在无序表中取一个元素,在有序表中找到其位置,然后将其插入到有序表中.这样的排序算法就是插入排序 一.插入排序的分类 直接插入排序 折半插入 ...

  5. 【数据结构笔记29】最小生成树问题:Prim算法与Kruskal算法

    本次笔记内容: 8.1.1 Prim算法 8.1.2 Kruskal算法 文章目录 最小生成树问题 什么是最小生成树(Minimum Spanning Tree) 贪心算法 Prim算法 Kruska ...

  6. 查找算法:折半查找算法实现及分析

    折半查找算法介绍 折半查找(Binary Search)又称为二分查找.它的前提是线性表中的记录必须是关键码有序(通常从小到大有序),线性表必须采用顺序存储.从算法名称可以看出算法的思路,先取有序序列 ...

  7. 【查找算法】折半查找算法

    ​ 零.写在前面 CSDN21天学习挑战赛 本人蒟蒻一枚,文章若有不足之处请大家批评指出,欢迎大家留言. 活动地址:CSDN21天学习挑战赛 文章目录 零.写在前面 一.算法是什么? 二.折半查找算法 ...

  8. 数据结构笔记(三十一)--折半查找

    折半查找 顺序查找的算法简单,但是平均查找长度较大,特别不适用于较大的查找表 其查找查找的平均长度为(1+n)/2 1.折半查找举例及总结 2.折半查找伪代码 折半查找是分治类算法可以用递归来实现 3 ...

  9. 二分法查找算法(折半查找算法)

    二分法查找又叫折半法查找算法,就是在有序的数组内,找到特指的一个值.这里要注意有序,无序的话只能一个一个找了,正是因为有序,为了使程序跑的快,高效才有的二分法查找算法. 逻辑:(默认从小到大的顺序)指 ...

  10. 递归与分治——二分查找算法(折半查找算法)

    二分搜索主要解决的问题是确定排序后的数组中是否包含目标元素val. 二分搜索通过持续跟踪数组中包含元素val的范围.分为两个过程,第一就是找到了,第二个就是没找到: 一开始,这个范围是整个数组,然后通 ...

最新文章

  1. GridView的编辑,更新,取消,删除等功能演示
  2. FireBug的控制台管理
  3. 切换debian8系统语言环境
  4. 其它综合-VMware虚拟机安装Ubuntu 19.04 版本
  5. 复习者-Java EE 7概览
  6. 一图解惑SQL JOINS
  7. [C++] - 单例模式 释放资源 析构函数的应用
  8. ASP.NET性能监控和优化入门
  9. 【轻院热身赛】级数求和、进制转换、candy
  10. SynchronousQueue
  11. antv g6 禁止移动_十 AntV
  12. C++ 对象的内存布局【转】
  13. 大龄程序员的4年生涯
  14. 十行 Python 代码就提取了韦小宝的身份证信息!
  15. word批量导入试题,一键组卷,单机软件题库管家迎来1.2版本
  16. jav学习日记:多线程(一)
  17. 大数据Spark(三十九):SparkStreaming实战案例四 窗口函数
  18. Web前端优化最佳实践及工具集锦(如减少页面加载时间)
  19. 【并发编程】- 基础篇
  20. python贪心算法几个经典例子_关于贪心算法的一些探讨、经典问题的解决和三种典型的贪心算法算法(哈弗曼,Kruskal,Prim)的Python实现。...

热门文章

  1. java web 断点上传_使用WebUploader实现分片断点上传文件功能(二)
  2. as it exceeds the max of 500KB._我的英雄学院The “Ultra” Stage角色介绍第三弹!
  3. oracle 10g RAC app VIP ,ONS,GSD,ASM,OCR,VOTE名称及代表的涵义。
  4. 玩转SpringBoot 2 之项目启动篇
  5. Linux-存储服务之NFS
  6. python 进程 线程 协程
  7. STL之Deque容器
  8. 2006年9月全国计算机等级考试三级数据库技术笔试试卷(含有答案)
  9. AngularJS复习小结
  10. codeforces 816 B. Karen and Coffee(思维)