插入法(直接/二分/希尔)

news/2024/5/20 10:50:35
//稳定耗时: 双向冒泡,可指定最大最小值个数MaxMinNum<n=sizeof(Arr)/sizeof(Arr[0]),
void BiBubbleSort(int Arr[],int n,int MaxMinNum){int left=0,right=n-1;int i;bool notDone= true;int temp;int  minPos;while(left<right&&notDone  ){        notDone= false;for(i=left;i<right;i++){if(Arr[i]>Arr[i+1]){//swap(Arr[i],Arr[i+1]);temp=Arr[i];Arr[i]=Arr[i+1];Arr[i+1]=temp;notDone= true;//}// if(Arr[i]<Arr[left])//minPos=i; //最小值//	{//		  temp=Arr[left];//		  Arr[left]=Arr[minPos];// 		  Arr[minPos]=temp;//	}}right--;//右边界增加一个最大值for(i=right-1;i>=left;i--){if(Arr[i]>Arr[i+1]){//swap(Arr[i],Arr[i+1]);temp=Arr[i];Arr[i]=Arr[i+1];Arr[i+1]=temp;notDone= true;}}left++;//左边界增加一个最小值if(MaxMinNum>0){MaxMinNum--;if(MaxMinNum==0)return;}}
}

直接插入

void InsertSort(int* arr, int n)
{for (int i = 0; i < n - 1; ++i){int end = i;//记录有序序列最后一个元素的下标int tem = arr[end + 1];//待插入的元素//单趟排while (end >= 0){//比插入的数大就向后移if (tem < arr[end]){arr[end + 1] = arr[end];end--;}//比插入的数小,跳出循环else{break;}}//tem放到比插入的数小的数的后面arr[end  + 1] = tem;//代码执行到此位置有两种情况://1.待插入元素找到应插入位置(break跳出循环到此)//2.待插入元素比当前有序序列中的所有元素都小(while循环结束后到此)}
}

二分插入法直接插入上改进(n<1024),明显减少数据比较次数,快速定位,n过大不如直接插入快;

a[] 有序:type为 0 时排序从小到大,为 1 时排序从大到小,n=sizeof(a)/sizeof(a[0]);
void InsertSort_binary(int a[],int n)//,int type)
{for ( int i = 1; i < n; i++){int temp=a[i];  //临时待插入值int left=0;  //左侧边界值int right=i-1;  //右侧边界值while (left <= right){// int mid = (left+right) / 2;  //中间值 可能溢出INT_MAX;int mid = left + ( right - left) / 2;if(a[mid] > temp)//if(type == 0 ? (a[mid] > temp) : (a[mid] < temp)){right = mid - 1;   //把右侧边界缩小,在中间值得左边进行寻找}else {left = mid + 1;  //把左侧边界加大,在中间值得右边进行寻找}            }for ( int j = i-1; j >= left; j--)  //将left到i-1之间的数都往后移动一个位置//如果j<left 或j=0,将不会有数进行位置的移动{a[j+1] = a[j];}a[left] = temp;      //将要插入的数值插入到合适位置       }    
}

希尔 非稳定排序,最高效接近快排;

void ShellSort(int* arr, int size)
{int gap = size;while (gap > 1){gap = gap / 3 + 1;	//调整希尔增量int i = 0;for (i = 0; i < size - gap; i++)	//从0遍历到size-gap-1{int end = i;int temp = arr[end + gap];while (end >= 0){if (arr[end] > temp){arr[end + gap] = arr[end];end -= gap;}else{break;}}arr[end + gap] = temp;	//以 end+gap 作为插入位置}}
}

n=10000 时间对比

n=100000 时间对比


http://www.mrgr.cn/p/60247200

相关文章

智慧旅游推动旅游服务智慧化转型:借助智能科技的力量,实现旅游资源的精准匹配和高效利用,为游客提供更加便捷、舒适的旅游环境

目录 一、引言 二、智慧旅游的定义与特点 &#xff08;一&#xff09;智慧旅游的定义 &#xff08;二&#xff09;智慧旅游的特点 三、智能科技在旅游服务中的应用 &#xff08;一&#xff09;大数据分析助力旅游决策 &#xff08;二&#xff09;人工智能实现个性化推荐…

1、安装terminator分屏工具

1 安装分屏工具terminator 打开ubuntu自带终端,输入sudo apt-get install terminator命令安装分屏工具terminator。 再重新打开ubuntu自带终端,在屏幕上右击

【GaussDB(for MySQL)】 Big IN查询优化

在生产环境中,经常会遇到客户业务的SQL语句进行过滤查询,然后进行聚合处理,并且IN谓词列表中包含几千甚至上万个常量值。本文分享自华为云社区《【MySQL技术专栏】GaussDB(for MySQL) Big IN查询优化》,作者:GaussDB 数据库。背景介绍在生产环境中,经常会遇到客户业务的S…

2 集成开发环境的搭建

1 安装分屏工具terminator 打开ubuntu自带终端,输入sudo apt-get install terminator命令安装分屏工具terminator。 再重新打开ubuntu自带终端,在屏幕上右击

IDEA使用Maven生成普通项目没有生成iml文件解决方法

右击主目录选择&#xff1a; Open in Terminal 在生成的控制台输入&#xff1a; mvn idea:module 回车便自动生成iml文件啦&#xff01; 双击下主目录就可以看见啦

完美匹配企业需求的FTP替代软件,需要具备哪些功能和价值?

FTP作为世界范围内第一个文件传输协议,已被广泛使用30多年,也是企业使用较多的一种方式。但在数字化转型的浪潮中,企业对文件传输的需求日益增长,FTP存在的弊端也逐渐成为企业发展的桎梏,比如安全性、稳定性、传输效率等方面,迫切需要寻找FTP替代软件。以下是迫使企业替换…

回答篇:测试开发高频面试题目

引用之前文章&#xff1a;《测试开发高频面试题目》 https://blog.csdn.net/qq_41214208/article/details/138193469?spm1001.2014.3001.5502 本篇文章是回答篇&#xff08;持续更新中&#xff09; 1. 什么是测试开发以及其在软件开发流程中的作用。 a. 测试开发是指测试人员或…

问题:PCB文件PADS查看不了

原因:格式默认不对 解法:切换格式,重新导入 做法:

算法学习009-最小花费爬楼梯 c++动态规划算法实现 中小学算法思维学习 信奥算法解析

目录 C最小花费爬楼梯 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、运行结果 五、考点分析 六、推荐资料 C最小花费爬楼梯 一、题目要求 1、编程实现 给定一个整数数组 cost &#xff0c;其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付…

jupyter notebook使用conda虚拟环境

要在Jupyter中使用conda环境&#xff0c;你需要确保你的conda环境已经被创建&#xff0c;然后安装nb_conda包&#xff0c;这是一个conda的Jupyter扩展&#xff0c;允许你在Jupyter中管理和选择不同的conda环境。 以下是步骤和示例代码&#xff1a; 创建一个新的conda环境&…

sonar(二)扫描配置

1.配置导出pdf的报告 下载jar包: 链接:https://pan.baidu.com/s/1zZUPYoCx9-ssrvyxprS6RA 提取码:9999 放入目录: 在sonar页面上配置插件pdf的用户名和密码配置sonar的配置文件: 2.idea增加sonarline插件 3.sonar界面新增项目,记住token修改项目的build节点,增加sonar-m…

使用Android Studio 搭建AOSP FrameWork 源码阅读开发环境

文章目录 概述安装Android Studio编译源码使用Android Studio打开源码制作ipr文件直接编译成功后自动打开Android Studio 修改SystemUI验证开发环境 概述 我们都知道Android的系统源码量非常之大&#xff0c;大致有frameworka层源码&#xff0c;硬件层(HAL)源码&#xff0c;内…

C# 生成DLL 并 调用

1、生成DLL新建一个类库程序,右键属性->生成,勾选XML文档文件,该操作可以在被调用的时候显示其注释新建一个类文件,类及其子方法要为public   右键项目生成,会生成对应的三个文件。dll、pbd、xml文件 2、调用,在需要调用的项目中右键引用,选择该dll,然后需要把xml…

MapReduce

1.需求 创建一个文件上传到HDFS&#xff0c;统计每个学生的总成绩&#xff0c;文件内容如下&#xff1a; 使用MapReduce 张三 英语 80 河南省 张三 数学 50 河南省 张三 语文 60 河南省 李四 英语 90 河南省 李四 语文 90 河南省 李四 数学 85 河南省 通过结果&#xff…

mac修改idea中的git密码

gitlab账号修改了密码,idea拉取远程仓库,无法拉取成功。在设置中勾选 Do not save,forget passwords after restart重启 如安装了gitlab插件,在插件中不勾选这个插件。(勾选这个插件会提示用Token登录)重新fetch代码,就会提示重新输入密码

Colibri for Mac v2.2.0 原生无损音频播放器 激活版

Colibri支持所有流行的无损和有损音频格式的完美清晰的比特完美播放&#xff0c;仅使用微小的计算能力&#xff0c;并提供干净和直观的用户体验。 Colibri在播放音乐时使用极少的计算能力。该应用程序使用最先进的Swift 3编程语言构建&#xff0c;BASS音频引擎作为机器代码捆绑…

对Windows超融合S2D的一些补充

先说一个不知道算不算BUG的例子&#xff0c;下面这个存储池是用两台服务器各2块10G建立的&#xff0c;除去系统保留的部分&#xff0c;显示还有13G可用。 但如果使用其新建虚拟磁盘会显示可用的空间为0 然后我又各增加了一块10G硬盘进池&#xff0c;变成了可用空间为30.5GB …

洛谷 P4148:简单题 ← KD-Tree模板题

【题目来源】https://www.luogu.com.cn/problem/P4148【题目描述】 你有一个 NN 的棋盘&#xff0c;每个格子内有一个整数&#xff0c;初始时的时候全部为 0&#xff0c;现在需要维护两种操作&#xff1a; ● 1 x y A → 1≤x,y≤N&#xff0c;A 是正整数。将格子 (x,y) 里的数…

Altium PCB添加平衡铜/盗铜的方法(依旧是简单粗暴)

最近画的板子遇到了PCB残铜率不足的问题,一般想法也是用整板覆铜的方法来填满空旷的区域,但是这个会带来很多碎铜,特别是表层有元器件,覆铜会产生更多碎铜,但是不覆铜又会导致残铜率低,板厂的说法是残铜率过低会导致PCB外层电镀时电流不均衡,后果就是铜箔厚度不均匀,内…