news 2026/4/16 12:30:57

插入排序算法实现(二分查找搜索版本)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
插入排序算法实现(二分查找搜索版本)

我来为你写一个完整的C语言二分插入排序程序。

#include<stdio.h>// 二分查找插入位置intbinarySearch(intarr[],intleft,intright,intkey){while(left<=right){intmid=left+(right-left)/2;if(arr[mid]==key){returnmid+1;// 保持稳定性,插入到相同元素的后面}elseif(arr[mid]<key){left=mid+1;}else{right=mid-1;}}returnleft;// 返回插入位置}// 二分插入排序voidbinaryInsertionSort(intarr[],intn){for(inti=1;i<n;i++){intkey=arr[i];// 当前要插入的元素intj=i-1;// 使用二分查找找到插入位置intpos=binarySearch(arr,0,j,key);// 将插入位置之后的元素后移while(j>=pos){arr[j+1]=arr[j];j--;}// 插入元素arr[pos]=key;}}// 打印数组voidprintArray(intarr[],intn){for(inti=0;i<n;i++){printf("%d ",arr[i]);}printf("\n");}intmain(){intarr[]={64,34,25,12,22,11,90,88,75,50};intn=sizeof(arr)/sizeof(arr[0]);printf("原始数组: ");printArray(arr,n);binaryInsertionSort(arr,n);printf("排序后数组: ");printArray(arr,n);return0;}

程序说明:

  1. 算法思想

· 将数组分为已排序和未排序两部分
· 对未排序部分的每个元素,使用二分查找在已排序部分找到插入位置
· 然后移动元素并插入

  1. 时间复杂度

· 最好情况:O(n) - 数组已经有序时
· 平均情况:O(n²) - 但比较次数比普通插入排序少
· 最坏情况:O(n²) - 但移动元素的次数与普通插入排序相同

  1. 空间复杂度

· O(1) - 原地排序,只需要常数级别的额外空间

  1. 优化点

· 使用二分查找减少比较次数(从O(n)降到O(log n))
· 但元素移动的次数没有减少

  1. 变种版本(更简洁的实现):
// 更紧凑的实现方式voidbinaryInsertionSortCompact(intarr[],intn){for(inti=1;i<n;i++){intkey=arr[i];intleft=0,right=i-1;// 二分查找插入位置while(left<=right){intmid=left+(right-left)/2;if(arr[mid]>key){right=mid-1;}else{left=mid+1;}}// 移动元素for(intj=i-1;j>=left;j--){arr[j+1]=arr[j];}// 插入元素arr[left]=key;}}
  1. 使用示例
intmain(){// 测试示例1intarr1[]={3,1,4,1,5,9,2,6,5,3};intn1=sizeof(arr1)/sizeof(arr1[0]);printf("示例1 - 原始数组: ");printArray(arr1,n1);binaryInsertionSort(arr1,n1);printf("示例1 - 排序后: ");printArray(arr1,n1);// 测试示例2intarr2[]={100,64,34,25,12,22,11,90};intn2=sizeof(arr2)/sizeof(arr2[0]);printf("\n示例2 - 原始数组: ");printArray(arr2,n2);binaryInsertionSort(arr2,n2);printf("示例2 - 排序后: ");printArray(arr2,n2);return0;}

这个二分插入排序相比普通插入排序的主要优点是减少了比较次数,特别是当数组较大时,这个优势会更明显。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 11:08:10

基于STM32的温度PID控制系统实现

一、系统架构设计 1.1 核心模块选型模块推荐型号关键参数温度传感器DS18B2012位分辨率&#xff0c;0.5℃精度执行机构TEC1-12706最大温差60℃&#xff0c;电流6A电压基准REF30303.0V0.05%精度电流检测ACS712ELC-055A量程&#xff0c;1.5%误差 二、硬件接口实现 2.1 传感器接口电…

作者头像 李华
网站建设 2026/4/16 2:20:20

君耀压敏电阻25D系列的高性能过压保护解决方案

君耀压敏电阻25D系列是君耀&#xff08;Brightking&#xff09;推出的高性能压敏电阻产品&#xff0c;广泛应用于电子电路的过压保护。该系列产品以其快速响应、高浪涌电流承受能力以及广泛的电压范围而备受市场青睐。可以说&#xff0c;君耀压敏电阻25D系列是您的高性能过压保…

作者头像 李华
网站建设 2026/4/9 19:01:45

STM32 SAI接口TDM模式深度解析:多通道音频传输的终极解决方案

STM32 SAI接口TDM模式深度解析&#xff1a;多通道音频传输的终极解决方案在音频处理和多通道数据采集领域&#xff0c;TDM&#xff08;时分复用&#xff09;技术是解决高通道数传输的关键。本文将深入探讨STM32 SAI接口的TDM模式&#xff0c;揭示其在专业音频系统、多通道数据采…

作者头像 李华
网站建设 2026/4/11 0:23:31

市面上沙特二手车清关证书哪家好

市面上沙特二手车清关证书哪家好&#xff1f;随着沙特进口二手车市场需求的日益增大&#xff0c;二手汽车清关成为了众多从业者关注的重点&#xff0c;而获得符合要求的清关证书是顺利清关的关键。在市面上众多提供沙特二手车清关证书服务的机构中&#xff0c;ASTC-TI那尔泰柯尼…

作者头像 李华
网站建设 2026/4/15 13:24:56

AI大模型优化了谁?程序员还是产品经理?

一名失业中的程序员&#xff0c;因一次创新的求职方式引发全网关注。林默然以999元的价格&#xff0c;在上海地铁陆家嘴站租用广告位5天&#xff0c;展示个人简历二维码&#xff0c;扫码即可追溯其"辗转的职场生涯"。 林默然于2023年5月选择"主动离职"。同…

作者头像 李华
网站建设 2026/4/16 12:17:05

电商客服机器人背后的技术支柱:Qwen3-14B实战

电商客服机器人背后的技术支柱&#xff1a;Qwen3-14B实战 在电商平台日均处理数百万用户咨询的今天&#xff0c;一个“能说会做”的智能客服系统早已不再是锦上添花的功能&#xff0c;而是保障用户体验和运营效率的核心基础设施。然而&#xff0c;许多企业尝试引入大模型时却陷…

作者头像 李华