数据结构 折半插入排序
来源:互联网 发布:网上订餐软件 编辑:程序博客网 时间:2024/05/19 12:13
Ⅰ )算法思想
从关于查找的讨论中可知,对有序表进行折半查找,其性能优于顺序查找。所以可以将折半查找思想用于在有序记录r[1, ...,i-1]中确定应插入的位置,相应的排序法称为折半插入排序法。折半插入排序是对直接插入排序算法的改进,在插入某记录时,采用折半查找的方法确定插入的位置。
Ⅱ)源代码
#include<stdio.h>#define MaxSize 50 typedef struct{ int key; //记录关键字}RecordType; //记录类型 void BinSort(RecordType r[],int length) //折半插入排序{ int low, high, mid; for (int i = 2; i <=length; i++) //i从2开始,假设i 前面为有序序列 { r[0] = r[i]; //将要插入的值赋给监视哨 low = 1; high = i - 1; while (low <= high) //确定插入位值 { mid = (low + high) / 2; if (r[0].key <r[mid].key) { high = mid - 1; //调整上界 } else { low = mid + 1; //调整下界 } } for (int j = i - 1; j >= low; j--) //j为要插入值的前一个下标 { r[j + 1] = r[j]; } r[low].key = r[0].key; }}int main(){ RecordType a[] = { 0, 18, 12, 15, 25, 56, 30, 54, 45, 65, 55}; //待排序列 int length = sizeof(a) / sizeof(a[0]) - 1; BinSort(a, length); //调用函数 for (int i = 1; i <= length; i++) { printf("%d ", a[i].key); } printf("\n"); return 0;}
Ⅲ)性能分析
采用折半插入排序法,可减少关键字的比较次数。每插入一个元素,需要比较的次数最大为折半判定树的深度。虽然折半插入排序法与直接插入排序法相比较,改善了算法中比较次数的数量级为O(nlog2n),但其并未改变移动元素的时间耗费,所以折半插入排序总的时间复杂度仍然是O(n^2)。
阅读全文
0 0
- 数据结构-折半插入排序
- [数据结构]折半插入排序
- 数据结构 折半插入排序
- 数据结构-排序: 折半插入排序
- 数据结构之 折半插入排序
- 数据结构实验 折半插入排序
- 数据结构-插入排序-折半插入排序
- 【数据结构】算法10.2 插入排序-折半插入
- 数据结构-插入排序(直接插入排序+折半插入排序)
- C++代码,数据结构-内部排序-插入排序-折半插入排序
- 排序-插入排序-折半插入排序-数据结构(27)
- 数据结构学习_折半插入排序
- 数据结构与算法简记:折半插入排序
- 数据结构排序算法——折半插入
- 数据结构与算法---直接折半插入排序
- 插入排序--折半插入
- 插入排序--折半插入
- java数据结构之插入排序(直接插入排序、折半插入排序、希尔排序)
- 关于在oj上出现Runtime error 的情况
- java新IO---缓冲区与Buffer
- .NET Web的身份认证
- 实验一 VMware Workstation 12的安装
- Jquery面试总结
- 数据结构 折半插入排序
- android中Spinner的使用
- 史上最详细安装zeroMQ(前提是一定要配置好网络yum源)
- Mybatis与Ibatis的区别
- LaTex快速编辑论文公式的方法
- [DeeplearningAI笔记]改善深层神经网络_深度学习的实用层面1.9_归一化normalization
- CentOS7 防火墙(firewall)使用方法
- Python手记(三):类的继承
- hashset类源码分析