C++实现折半插入排序
在“C++实现直接插入排序 ”中,由于插入排序的基本操作是在一个有序表中进行查找和插入,则这个“查找”操作可以利用“折半查找”来实现,由此进行的插入排序称之为折半插入排序
实现如下:
#include<iostream>
using namespace std;#define SIZE_A 9int main(){void myshow(int* p,int length);//函数提前声明int list[SIZE_A]={-1,49,38,65,97,76,13,27,49};cout<<"排序前:"<<endl;myshow(list,SIZE_A);//折半插入排序,位置【0】辅助空间,真正要排序的数据在位置【1】~【length-1】for(int i=2;i<sizeof(list)/sizeof(int);i++){list[0]=list[i];//将待插入数据暂存至位置【0】int low=1;int high=i-1;while(low<=high){//在【low】和【high】中折半查找有序插入的位置int middle=(low+high)/2;//折半if(list[0]<list[middle]){//插入位置在前半段high=middle-1;}else{//插入位置在后半段low=middle+1;}}//whilefor(int j=i-1;j>=high+1;j--){//记录后移list[j+1]=list[j];}list[high+1]=list[0];//插入}//forcout<<"排序后:"<<endl;myshow(list,SIZE_A);return 0;}
/*
description:
在标准输出设备上显示数组元素。
parameter:
int* p:指向整形数组首元素的指针
int length:整形数据长度
*/
void myshow(int* p,int length){for(int i=0;i<length;i++){cout<<*(p+i)<<"\t";}cout<<endl;
}
运行结果为:
时间与空间复杂度分析
空间复杂度:
从上述实现可以看出,折半插入排序所需辅助空间和直接插入排序相同(都只需要一个辅助空间,即哨兵);
时间复杂度:
折半插入排序仅仅减少了关键字比较的次数,而记录的移动次数不变。因此,折半插入排序的时间复杂度仍为O(n*n)。
C++实现折半插入排序相关推荐
- java 折半插入排序_[Java代码] Java实现直接插入排序和折半插入排序算法示例
1 排序思想: 将待排序的记录Ri插入到已经排好序的记录R1,R2,--,R(N-1)中. 对于一个随机序列而言,就是从第二个元素开始,依次将这个元素插入到它之前的元素中的相应位置.它之前的元素已经排 ...
- 排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序...
先推荐一篇关于排序算法的文章:http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html 本文思路部分来源于上篇文章,但测得的结果似乎 ...
- 折半插入排序稳定吗_C++实现经典算法--折半插入排序
本节用c++实现经典的折半插入排序,也是王道上总结得插入排序的第二种算法,思路很清晰,首先将用户输入保存在数组中,然后从数组第二个元素开始遍历整个序列,每次将元素跟其左边邻居元素比较,如果出现小于其邻 ...
- 简单插入排序,折半插入排序和2路插入排序 c源码
以下三种插入排序时间复杂度均为O(n^2) 简单插入排序,简单直接.假定数组有序,插入 i, 从后往前遍历找到适合位置 j,移动 j +1 ~ i -1往后一位,插入i到j中. void insert ...
- 三种插入排序算法:直接插入排序、折半插入排序、希尔插入排序
一.直接插入排序 空间复杂度:O(1) 时间复杂度:O(n^2) 稳定性:稳定 适用性:顺序表和链表 //直接插入排序 void InsertSort1(int A[],int n){int i,j, ...
- 数据结构之折半插入排序图文详解及代码(C++实现)
问题: 对待排序的数组r[1..n]中的元素进行直接插入排序,得到一个有序的(从小到大)的数组r[1..n]. 算法思想: 1.设待排序的记录存放在数组r[1..n]中,r[1]是一个有序序列. 2. ...
- C语言实现折半插入排序(Binary Insertion Sort)算法(附完整源码)
折半插入排序Binary Insertion Sort 折半插入排序(Binary Insertion Sort)算法的完整源码(定义,实现,main函数测试) 折半插入排序(Binary Inser ...
- 直接插入排序,折半插入排序,希尔排序,简单选择排序,冒泡排序,快速排序模板以及比较次数与移动次数的分析,折半搜索算法模板
#include<stdio.h> #include<time.h> #include <stdlib.h>const int maxx=1e2+1; int a[ ...
- 二分查找和折半插入排序一块说说-很合适~~~
前言 上一篇在聊时间复杂度和空间复杂度时,没有按指定格式显示(明明预览的时候没问题的),强迫症的我稍微优化了一下重新发布,目的就是让小伙伴看着舒服. 上次聊到的直接插入排序在比较有序数据和待插入数据时 ...
最新文章
- 38 JavaScript中的this指向问题
- 关于Django的时区设置TIME_ZONE,USE_TZ的问题
- Python为何能成为数据分析的主流工具?
- Flask设置、获取、删除cookies
- TIOBE 发布 8 月编程语言榜单:C# 排名如何?
- jsp页面c标签循环map , c:foreach 循环map
- 全流分析取证:高级威胁哪里跑?!
- android 基类fragment,Android DialogFragment 基类的定制
- java 规则引擎_【java规则引擎】java规则引擎搭建开发环境(示例代码)
- c语言怎么产生随机字母,菜鸟求助,写一个随机输出26个英文字母的程序
- SDUT-保留整数 -
- C#基础-Func,Action
- ANSYS mesh网格划分
- iOS开发:导入字体库
- Mock数据模板规范详解
- 介绍一个产品的思维导图_产品经理可以用思维导图做什么?
- android虚拟按键趋势,为什么Android虚拟按键老被吐槽但却有厂商坚持在做?
- 如何顺利通过c语言补考,大学里补考比考试难的学科,不想挂科最好认真学,尤其大一新生...
- 呼叫中心客服人员的秘密生活:同理心永远不会让你遭殃
- 手机端网页设计尺寸大小