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

//稳定耗时: 双向冒泡,可指定最大最小值个数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.mzph.cn/bicheng/6834.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图像处理--空域滤波增强(原理)

一、均值滤波 线性滤波算法&#xff0c;采用的主要是邻域平均法。基本思想是使用几个像素灰度的某种平均值来代替一个原来像素的灰度值。可以新建一个MN的窗口以为中心&#xff0c;这个窗口S就是的邻域。假设新的新的像素灰度值为&#xff0c;则计算公式为 1.1 简单平均法 就是…

LeetCode 234.回文链表

题目描述 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为 回文链表 。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff…

PWN入门之Stack Overflow

Stack Overflow是一种程序的运行时&#xff08;runtime&#xff09;错误&#xff0c;中文翻译过来叫做“栈溢出”。栈溢出原理是指程序向栈中的某个变量中写入的字节数超过了这个变量本身所申请的字节数&#xff0c;导致与其相邻的栈中的变量值被改变。 在本篇文章中&#xff…

常用语音识别开源四大工具:Kaldi,PaddleSpeech,WeNet,EspNet

无论是基于成本效益还是社区支持&#xff0c;我都坚决认为开源才是推动一切应用的动力源泉。下面推荐语音识别开源工具&#xff1a;Kaldi&#xff0c;Paddle&#xff0c;WeNet&#xff0c;EspNet。 1、最成熟的Kaldi 一个广受欢迎的开源语音识别工具&#xff0c;由Daniel Pove…

下一代防火墙是什么?

下一代防火墙(NGFW&#xff0c;Next-Generation Firewall)是一种高级安全设备&#xff0c;它提供了传统防火墙的功能并加入了更多的安全特性&#xff0c;以应对现代复杂网络环境中的安全威胁。NGFW不仅包括基本的数据包过滤功能&#xff0c;还集成了深度包检测(DPI)、入侵防御系…

代码随想录算法训练营DAY54|C++动态规划Part15|647.回文子串、516最长回文子序列、

文章目录 647.回文子串思路CPP代码双指针 516最长回文子序列思路CPP代码 动态规划总结篇 647.回文子串 力扣题目链接 文章链接&#xff1a;647.回文子串 视频链接&#xff1a;动态规划&#xff0c;字符串性质决定了DP数组的定义 | LeetCode&#xff1a;647.回文子串 其实子串问…

fcn网络是怎么学习 时间序列 怎么进行分类的啊 这是我的wave1_test.shape (2904, 3, 8000)

**全卷积网络&#xff08;FCN&#xff09;**处理时间序列数据进行分类的方法主要涉及以下几个步骤&#xff1a; 1. 数据预处理 首先&#xff0c;时间序列数据&#xff08;如你的 wave1_test 形状为 (2904, 3, 8000)&#xff09;需要适当的预处理。这可能包括归一化、去噪等步…

容器下的 Go 应用程序优化

1. 内存对齐 结构体内字段&#xff0c;从大到小排列 减少内存占用 1&#xff09;安装 fieldalignment 工具 go install golang.org/x/tools/go/analysis/passes/fieldalignment/cmd/fieldalignmentlatest 2&#xff09;分析并修复内存对齐 fieldalignment -fix ./.../Us…

第07-6章 应用层详解

HTTP、SSL&#xff1a;基于TCP&#xff0c;HTTP端口:80、HTTPS&#xff08;加密&#xff09;端口&#xff1a;443&#xff1b;FTP:基于TCP&#xff0c;两类端口&#xff1a;21、20&#xff08;数据传输之前需要建立连接此时是21&#xff0c;真正传输数据时用20&#xff09;TFTP…

JS基础:常见的6种语句详解

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端基础路线”&#xff0c;可获取完整web基础…

机器学习中线性回归算法的推导过程

线性回归是机器学习中监督学习中最基础也是最常用的一种算法。 背景&#xff1a;当我们拿到一堆数据。这堆数据里有参数&#xff0c;有标签。我们将这些数据在坐标系中标出。我们会考虑这些数据是否具有线性关系。简单来说 我们是否可以使用一条线或者一个平面去拟合这些数据的…

「AIGC」ChatGPT入门

一、了解ChatGPT 1. ChatGPT是什么 ChatGPT是一种基于人工智能技术的自然语言处理&#xff08;NLP&#xff09;模型&#xff0c;它能够通过机器学习算法理解和生成人类语言。这种模型通常用于聊天机器人、语言翻译、内容生成、问答系统等多种场景。ChatGPT能够模拟人类的对话…

机器学习中的简单指数平滑(SES)

简单指数平滑&#xff08;Simple Exponential Smoothing&#xff09;是一种常用的时间序列预测方法&#xff0c;用于对时间序列数据进行平滑处理并进行未来数值的预测。 简单指数平滑的核心思想是基于过去观测值的加权平均来预测未来的值&#xff0c;其中较近的观测值被赋予更…

vue服务器端数据预取Server-Side Data Fetching例子

Vue.js 本身并不直接处理服务器端数据预取&#xff08;Server-Side Data Fetching&#xff09;&#xff0c;这通常涉及到在服务器端&#xff08;可能是一个 Node.js 应用、API 服务器或其他后端服务&#xff09;预先获取数据&#xff0c;并在页面加载时将其传递给 Vue.js 客户端…

如何在交换机上重置密码而不丢失配置?如何配置SSH远程登录?

在网络设备管理中&#xff0c;保持设备的安全性是至关重要的&#xff0c;所以console密码是必须设置的&#xff0c;绝对不能偷懒。 但是&#xff0c;如果习惯不好&#xff0c;或者离职时交接不好&#xff0c;就会导致密码丢失&#xff0c;此时想要修改网络设置的配置就麻烦了。…

华为OD机试 - 符号运算 - 递归(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

Linux uuencode命令教程:如何将二进制文件编码为ASCII文本(附案例详解和注意事项)

Linux uuencode命令介绍 uuencode&#xff08;Unix-to-Unix encoding&#xff09;命令用于将二进制文件编码为ASCII文本。这样做的目的是为了在可能会破坏数据的通道上发送文件。 Linux uuencode命令适用的Linux版本 uuencode命令在大多数Linux发行版中都可以使用&#xff0…

使用 FFmpeg 从音视频中提取音频

有时候我们需要从视频文件中提取音频&#xff0c;并保存为一个单独的音频文件&#xff0c;我们可以借助 FFmpeg 来完成这个工作。 一、提取音频&#xff0c;保存为 mp3 文件: 要使用 FFmpeg 从音视频文件中提取音频&#xff0c;并将 ACC 编码的音频转换为 MP3 格式&#xff0…

CNN实现fashion_mnist数据集分类(tensorflow)

1、查看tensorflow版本 import tensorflow as tfprint(Tensorflow Version:{}.format(tf.__version__)) print(tf.config.list_physical_devices())2、加载fashion_mnist数据与预处理 import numpy as np (train_images,train_labels),(test_images,test_labels) tf.keras.d…

Neo4j+LLM+RAG 环境配置报错处理

开发KGLLMRAG程序时遇到以下报错&#xff0c;记录下处理方案&#xff1a; ValueError: Could not use APOC procedures. Please ensure the APOC plugin is installed in Neo4j and that ‘apoc.meta.data()’ is allowed in Neo4j configuration 这个参考文章&#xff1a;link…