排序算法(C实现)---------- 折半插入排序

C语言实现折半插入排序算法(附完整源码) 代码中使用了一个双重循环结构,外层循环控制排序的轮次,内层循环使用二分查找寻找插入位置。在找到插入位置后,内部循环向后移动所有比当前元素大的元素,并将当前元素插入到合适的位置。折半插入排序是一种优化过的插入排序算法,在插入元素时采用二分查找来寻找插入位置,从而减少了比较次数。其时间复杂度为O(n^2),但在已经有序或基本有序的情况下,性能会较好。在测试数据中,我们使用了数组{3, 5, 1, 4, 2}进行排序。总之,折半插入排序算法在某些情况下比其他排序方法更有效率,并且代码也相对简单易懂。 阅读详情

           前面已经写过一篇插入排序,是属于直接插入排序,其算法简便,且容易实现,当待排记录的数量n很小时,这是一种很好的排序方法,但是,通常待排序序列中的记录数量n很大,则不宜采用直接插入排序。

           由于插入排序的基本操作是在一个有序表中进行查找和插入,则这里的查找就可以利用一系列的查找算法来实现,从而减少查找的次数,今天先采用最简单的“折半查找算法”来实现。

           主要步骤:

            1.  折半查找插入位置。

            2.  相应元素后移。

            3.  将待插入元素插入到查找到的位置。

//折半插入排序
void Binsert_sort(ElemType array[],int length){
	int inner,outer,i;
	int temp,position;
	int low,high,median;
	if(array == NULL || length == 0)
		exit(-1);
	for(outer = 1; outer < length ;outer++){
		//取出待插入元素
		temp = array[outer];
		low = 0;
		high = outer - 1;
		//查找插入位置
		while(low <= high){
			median = (low + high) >> 1;
			if(array[median] < temp)
				low = median + 1;
			else
				high = median - 1;
		}
		position = low;
		//相应元素后移
		i = outer;
		while(i > position){
			array[i] = array[i-1];
			i--;
		}
		//将待插入元素插入到position
		array[position] = temp;
	
	}
}

         其实,就是在原来直接插入排序的基础上修改查找算法。

C语言数据结构-折半插入排序 数据结构中的折半插入排序算法用C语言来实现的完整示例程序 立即下载

相关推荐

《数据结构》折半插入排序

《数据结构》严蔚敏版 折半插入排序

折半插入排序算法详解之C语言版

折半插入排序是插入排序方法中一种,相比较与直接插入排序算法,减少了排序过程中比较次数,也是一种常用的排序算法。 折半插入排序算法基本原理是将折半查找方法与直接插入排序方法相结合,也就是在每一次插入新元素时,利用折半查找方法找到其待插入的位置。

sunnyoldboy博客 1万+

告别LM2596!用LM5175打造400W自动升降压数控电源(附完整电路图与代码)

本文详细介绍了如何利用LM5175芯片设计400W自动升降压数控电源,替代传统的LM2596方案。通过四开关Buck-Boost拓扑结构,LM5175实现了高达98%的转换效率和400W大功率输出,支持无缝升降压切换。文章涵盖芯片选型、电路设计、PCB布局及STM32数控实现,为工程师提供完整的实践指南。

weixin_27032989的博客 599

C语言实现折半插入排序

C语言实现折半插入排序

qq_41829337的博客 952

逻辑漏洞:水平越权、垂直越权靶场练习

水平越权和垂直越权是组织中常见的管理问题,指的是员工在组织中所拥有的权力和责任超出其职位所应具备的范围。 水平越权是指员工在同一级别的职位上超越了其同事的权力和责任范围,通常表现为某个员工在团队中承担了过多的任务或权力,导致其他同事感到不公平或不满。 垂直越权则是指员工在组织中超越了其职位等级的权力和责任范围,通常表现为员工在没有得到上级批准的情况下做出决策或行动,可能会导致组织内部的混乱和冲突。

qq_68163788的博客 2470

Python数据爬取超详细讲解(零基础入门,老年人都看的懂)

Python数据爬取超详细讲解(零基础入门,老年人都看的懂)

python03011的博客 3754

C语言——折半插入排序算法

折半插入排序的基本思想是先利用折半查找找到相应插入的位置,再对元素进行移动。

2301_80202559的博客 1976

直击高频编程考点:字符串知识及经典算法题总结

字符串相关基本练习题总结(最长公共子串、最长回文子串、最长无重复字符子串、最小覆盖子串、字符串相乘、中文数字表达转实际数字格式等)

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 172万+

折半插入排序C语言实现

折半插入排序的原理如上图 代码如下: #include<stdio.h>//折半插入排序 void zhebaninsertsort(int a[],int n){ int i,p; int temp; for(p=1;p<n;p++){ temp=a[p]; int low=0; int high=p-1; int mid; while(low<=high) { mid=(l...

m0_57673664的博客 2835

【Claude】Claude Code 子代理(Subagents)完全指南:多 AI 编排与并行任务管理

子代理是在独立上下文窗口特性主代理子代理上下文窗口与你对话的主上下文完全独立的上下文工具权限拥有所有工具可自定义限制生命周期整个会话完成任务后结束通信方式直接对话结果返回给主代理模型继承主会话设置可指定不同模型你可以创建专属子代理,指定模型、工具权限和系统提示。在对话中,Claude 会根据任务自动选择合适的子代理。

博客 5538

QGis软件 —— 5、QGis增加线,并对线进行绘制、旋转、缩放、移动等基本操作

QGis软件 —— 5、QGis增加线,并对线进行绘制、旋转、缩放、移动等基本操作

8246

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

数据结构开发总结报告 ——内部排序综合设计程序的编程实现 实现各个排序算法(直接插入排序,折半插入排序,希尔排序,冒泡排序,简单选择排序) #include<stdio.h> #define MaxSize 20 #include<windows.h> typedef int KeyType; //定义关键字类型 typedef struct //记录类型 { KeyType key; //关键字项 } RecType;

ring__wang的博客 3646

SAR合成孔径雷达成像及处理(附带Matlab源代码)

总结:本文介绍了SAR合成孔径雷达的基本原理,并提供了使用Matlab实现SAR成像和处理的源代码示例。然后,在慢时间域进行方位压缩处理,通过计算每个接收通道的延迟和频移,将多次接收的信号叠加得到最终的成像结果。SAR成像的基本原理是通过接收雷达发射的脉冲信号的回波,并利用多次接收的信号进行叠加处理。以多普勒频移校正为例,根据雷达飞行速度和方位角,计算实际的多普勒频率,并对每个接收通道的数据进行频移校正,以消除因目标运动引起的频率偏移。通过调整参数和算法,可以实现不同的SAR成像和处理效果。

ByteJolt的博客 689

排序算法之插入排序C语言实现

插入排序 1、直接插入排序 算法思想:直接插入排序是无序序列插入到有序序列中,通常假定a[0]为已经排好序的子序列,然后将剩下无序序列一个一个插入到有序的子序列中。适用于基本有序和数据量不大的情况。 例如对于一个无序序列{45,32,56,71,12}来讲,首先确定45为有序的,然后在无序序列中向右遍历,32小于45则插入到45的前面,再继续往右遍历,56大于32同时也大于45则应该插入到45后面...

xiaobinbin2372的博客 1万+

Unity小游戏接入抖音敏感词检测

摘要: 本文介绍了Unity小游戏接入抖音敏感词检测的方法。抖音官方提供了两种API:SensitiveWordCheck用于检测敏感词,ReplaceSensitiveWords用于替换敏感词。此外,若使用键盘输入事件,可通过tt.onKeyboardComplete监听回调,平台会自动屏蔽敏感词(替换为*)。接入官方字库可有效避免审核驳回,适用于小游戏中的用户输入功能(如起名系统)。附官方文档链接及参数说明。

类人_猿的博客 4596

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

折半插入排序c语言 csdn,C语言实现各类排序算法

最近准备面试,重温数据结构,先给出各类排序算法,算法中注释比较少若想下载注释比较全的源代码上我的csdn下载我上学的时候写的:http://download.youkuaiyun.com/detail/jiezou007/1952628与现在写的有些区别。以下代码是这次写的,算法中对于指针与引用的选择。读者自己可以根据需要修改,冒泡算法是指针类型做函数变量,为了方便其余算法是C++引用。主函数中将注释更改后就...

weixin_39889487的博客 190

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

C语言——冒泡排序、选择排序、插入排序、折半查找

废话不多说直接上代码,注释都写了,基本没有难以理解的地方,前提是有基础的人来复习。 #include<stdio.h> #include<stdlib.h> void bubblesort(int a[],int len); void insertsort(int a[],int len); void selectsort(int a[],int len); int halfIntervalsearch(int a[],int len,int num); void printFun

weixin_44436319的博客 583

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

直接插入排序,折半插入排序和冒泡排序思想以及实现(c语言)

直接插入排序 算法思想: 直接插入排序的基本操作是将第 i 个记录插入到前面 i-1 个已经排好序的记录中。 具体过程为:将第 i 个记录的关键字 K 依次与前面排好序的关键字比较,如果比较的关键字大于 K ,则将该关键字后移一位,直至遇到小于 K 的关键字或到序列头部,然后将 K 插入到该关键字后面或序列头部(之前比较过的已经后移一位,所以会留有一个空位置供 K 插入)。 算法描述: void...

qq_43513077的博客 812

插入排序(直接插入排序和折半查找插入排序)

1 #include <stdio.h> 2 3 // 直接插入排序 4 void insert_sort(int sz[], int len) 5 { 6 for (int i = 2; i < len + 1; i++) 7 { 8 if (sz[i] < sz[i - 1]) // 如果应该放在当前位...

weixin_33919950的博客 1519

折半插入排序C/C++代码实现

折半插入排序就是查找操作使用折半查找的直接插入排序,除此之外它与直接插入排序基本一样。 算法属性: 时间复杂度为O(n^2) 空间复杂度为O(1) 稳定排序。 因为要进行折半查找, 所以只能用于顺序结构。 适合初始记录无序,n较大时的情况。 代码如下: #include<stdio.h> #define MAXSIZE 20 typedef int KeyType; typedef int InfoType; //记录类型 typedef struct { KeyType key; Inf

Ycy的博客 806

插入排序的实现(直接插入、折半插入)

插入排序 还记得大二下期数据结构期末考试有一道题就有插入排序。我感觉平时都理解了他的原理,但是一到敲代码的时候就不能完整的实现这个算法,以至于在不该丢分的地方丢了分,这也是很吃亏的地方。 好了,来总结一下插入排序。 首先,插入排序需要构建“有序表”,这是非常关键的一部分。我们通过用有序表外的数值与有序表内的数值比较,并且移动和交换就可以实现插入排序了。 什么是有序表呢? 1 2 4 3 5 我们从...

weixin_43879702的博客 371

【C语言】详解C语言常用的五种数组排序方式

给大家分享一下数组的各种常用的五种排序算法:选择排序、冒泡排序、交换排序、插入排序、折半排序。图文代码结合超简单一看就懂,建议收藏!

weixin_50111954的博客 2万+

直接插入排序,折半插入排序,希尔排序的C语言实现

#include<stdio.h> #define Elemtype int void Printf(Elemtype A[],int n){ int t; for(t = 1;t<n;t++ ){ printf("%d ,",A[t]); } } /************直接插入排序*************/ void InsertSort(Elemtype A[],int n){ int i , j; for(i=2;i&

761899457@qq.com 531

C语言排序算法

C语言排序 1、直接插入排序* #include <stdio.h> void insertsort(int arr[],int n){ int i,j; for(i=2;i<=n;i++){ arr[0]=arr[i]; j=i-1; while(arr[0]<arr[j]){ arr[j+1]=arr[j]; j--; } arr[j+1]=arr[0]; } } int main(void){ int arr[11],i; printf

weixin_43524674的博客 105

考研:插入排序(直接插入排序、折半插入排序、希尔排序)

插入排序        这次我写的 C语言版本 的,因为好多学校的程序设计都不考Java,考的 C/C++ ,而且如果你懂 Java 的话,把 C/C++翻译成Java是比较容易的 ,但是你要把 Java翻译成C/C++是有点儿难受的 ,所以这次我就没有写Java版了,如果前面的堆排序大家需要Java版本,可以在下面留言,下次补上。 一、直接插入排序 排序思想: 第一次以第一个为一个有序序列(因为一个元素的时候,自然就有序)。 然后

qq_39906334的博客 547

排序算法

@Adrian 一、插入排序 #include <stdio.h> #include <stdlib.h> //自定义的输入函数 void print(int a[],int n,int i){ printf("%d:",i); for(int j = 0;j<8;j++){ printf("%d",a[j]); } ...

qq_43228581的博客 148
上一篇: android项目 之 记事本(4) ----- 添加画板
下一篇: 排序算法(C实现)--------- 简单选择排序
jesson20121020
博客等级 码龄15年 361粉丝 99原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值