二分法c语言程序排序,二分法插入排序(C语言)
二分法插入排序,简称二分排序,是在插入第i个元素时,对前面的0~i-1元素进行折半,先跟他们中间的那个元素比,如果小,则对前半再进行折半,否则对后半进行折半,直到left>right,然后再把第i个元素前1位与目标位置之间的所有元素后移,再把第i个元素放在目标位置上。
算法步骤
1、二分法查找插入位置
如果R
2、后移,有点迷惑,什么时候需要后移呢?有哪些记录需要移动呢?
虽然我们很清楚的知道,我们需要后移那些排序码大于R的记录,但难免会问自己这样几个问题。其实它相当于需要移动从i-1到左指针的记录。
3、插入
由1中得到的左指针其实就是元素要插入的位置。
动图演示
image
#include
#include
#include
#include
#include
//交换数值
void swap(int *a,int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
//打印数组
void printArray(char msg[],int arr[],int len){
printf("%s:",msg);
for (int i = 0; i < len; i++){
printf("%d ", arr[i]);
}
printf("\n");
}
//二分法插入排序
void binary_insert(int a[],int len){
for(int i=1;i<=len-1;i++){
int left=0;
int right=i-1;
int temp=a[i];
//如果a[i]比最大值还大或者相等,则不交换位置,跳过二分查找
if(temp>=a[right]){
continue;
}
//left>right时循环终止
while(left<=right){
//折半
int mid=(left+right)/2;
if(temp
right=mid-1;
}else{
left=mid+1;
}
}
printf("要插入的数据:a[%d]=%d\n",i,temp);
printArray("插入数据前",a,len);
//大于等于left的位置后移一位
for(int j=i-1;j>=left;j--){
a[j+1]=a[j];
}
a[left]=temp;
printArray("插入数据后",a,len);
printf("\n");
}
}
int main()
{
int len=10;
int arr[len];
srand((unsigned)time(NULL));
//随机生成长度为"len"的数组
for(int i=0;i
arr[i]=rand()%200;
}
printArray("未排序前",arr,len);
binary_insert(arr,len);
printArray("二分法插入排序",arr,len);
//防止windows下控制台窗口闪退
int s;
scanf("%d",&s);
return 0;
}
运行结果:
未排序前:96 109 174 33 132 196 181 52 68 57
要插入的数据:a[3]=33
插入数据前:96 109 174 33 132 196 181 52 68 57
插入数据后:33 96 109 174 132 196 181 52 68 57
要插入的数据:a[4]=132
插入数据前:33 96 109 174 132 196 181 52 68 57
插入数据后:33 96 109 132 174 196 181 52 68 57
要插入的数据:a[6]=181
插入数据前:33 96 109 132 174 196 181 52 68 57
插入数据后:33 96 109 132 174 181 196 52 68 57
要插入的数据:a[7]=52
插入数据前:33 96 109 132 174 181 196 52 68 57
插入数据后:33 52 96 109 132 174 181 196 68 57
要插入的数据:a[8]=68
插入数据前:33 52 96 109 132 174 181 196 68 57
插入数据后:33 52 68 96 109 132 174 181 196 57
要插入的数据:a[9]=57
插入数据前:33 52 68 96 109 132 174 181 196 57
插入数据后:33 52 57 68 96 109 132 174 181 196
二分法插入排序:33 52 57 68 96 109 132 174 181 196
二分法c语言程序排序,二分法插入排序(C语言)相关推荐
- 培训c语言程序,编程人员培训手册C语言程序设计基础
<编程人员培训手册C语言程序设计基础>由会员分享,可在线阅读,更多相关<编程人员培训手册C语言程序设计基础(18页珍藏版)>请在人人文库网上搜索. 1.第2章:C语言程序设计基 ...
- 培训c语言程序,编程人员培训手册C语言程序设计基础.PPT
编程人员培训手册C语言程序设计基础.PPT 第2章C语言程序设计基础,学习的意义,从本章开始我们正式进入C语言程序设计的学习,也许大家会问为什么我们要学习C语言呢 理由1因为C语言流行. 理由2因为C ...
- c语言程序的书写格式,C语言程序书写格式辅导
C语言程序书写格式辅导 C语言具有语句简洁的特点,C语言程序的可读性比较差.因此,为了增强C语言的可读性,正确的书写格式就显得十分重要.同样一个程序采用不同的书写方法.尽管都可以得到相同的结果,有的书 ...
- c语言程序表达语句,《C语言程序设计》讲稿.doc
<C语言程序设计>讲稿 <C语言程序设计>讲稿 目 录 第一讲 C语言概述1 第二讲 C语言程序介绍2 第三讲 算法8 第四讲 数据类型(1)20 第五讲 数据类型(2)21 ...
- c语言程序报告样例,C语言个人实习报告定稿(样例3)
<C语言个人实习报告.doc>由会员分享,可免费在线阅读全文,更多与<C语言个人实习报告[定稿]>相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索. 1 ...
- c语言程序报告学分信息管理,C语言程序报告学生学籍信息管理系统(总21页
<C语言程序报告学生学籍信息管理系统(总21页>由会员分享,可在线阅读,更多相关<C语言程序报告学生学籍信息管理系统(总21页(21页珍藏版)>请在人人文库网上搜索. 1.C语 ...
- led c语言程序结设计,《C语言程序设计》学习领域课程标准-LED照明工程设计.doc...
<C语言程序设计>学习领域课程标准-LED照明工程设计.doc <C语言程序设计>课程标准 课程类别 专业核心课程 开课部门 电子信息工程系 总学时 64 学时 学分 4学分 ...
- c语言程序报告学分信息管理,c语言程序报告学生学籍信息管理系统.docx
文档编制序号:[KKIDT-LLE0828-LLETD298-POI08] 文档编制序号:[KKIDT-LLE0828-LLETD298-POI08] C语言程序报告学生学籍信息管理系统 C语言课程设 ...
- c语言程序结果好多0,C语言程序成绩管理系统设计报告.docx
C语言程序成绩管理系统设计报告 郑州轻工业学院实 训 报 告实训名称: 成 绩 管 理 系 统姓 名: 鲁雪颖 院 (系): 软 件 学 院 专业班级: 软件卓越12-01 学 号: 54121344 ...
最新文章
- Java中的“可运行的实现”与“扩展线程”
- node-sass安装失败解决方法
- SVN中如何去除版本控制器
- udev工作流程简图
- redis主从配置+哨兵模式
- redis java驱动_java中通过配置文件的方式(Jedis驱动)使用Redis
- android通知悬浮通知_Android通知直接回覆
- 小白如何购买阿里云服务器(2019最详细教程)
- wxFormBuilder + wxPython手撸丑陋计算器
- Windows 无法卸载IE9怎么办
- java继承有哪些_Java中的继承类型有哪些
- 浅谈制作BIM模型后期展示视频
- python跳转下一页_用Beautifulsoup转到下一页
- 几种css炫酷背景欣赏
- 机器学习练习 6 - Support Vector Machines(支持向量机)
- 解决更新pip后报错 Cannot open pip-script.py
- [蓝桥杯2019初赛]外卖店优先级
- Js_10_2_滚轮事件
- Java中com.jcraft.jsch.JSch讲解
- 第一次去江苏丹阳配眼镜注意事项⚠️