当前位置: 首页 > news >正文

基础算法(直接插入,希尔排序,快排,归并,折半查找)

/*直接插入:把待排序序列分为有无序区和和无序区,使用无序区的数据一次插入倒有序区中,最终结果尾有序序列

1> 把数据分为有序区和无序区,默认第一个元素在有序区,剩下在无序区

2> 外层循环,循环无序区 的元素 for(i=1;i<n;i++)

3> 内层循环,倒序循环有序区 for(j=i-1;j>=0&&arr[j]>temp;j–)

4> 【升序】有序区元素如果大于插入的元素,后移arr[j+1]=arr[j]

5> 在j+1下标插入temp

时间复杂度:O(n^2)*/

#include<stdio.h>
int main(int argc, const char *argv[])
{int i,j;int arr[7]={4,2,3,1,5,6,7};int n=sizeof(arr)/sizeof(arr[0]);for(i=1;i<n;i++){int temp=arr[i];for(j=i-1;j>=0&&temp<arr[j];j--){arr[j+1]=arr[j];}arr[j+1]=temp;}for(int i=0;i<n;i++){printf("%d\t",arr[i]);}return 0;
}

//希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;

//随着增量逐渐减少,每组包含的越来越多,当增量减至 1 时,整个文件恰被分成一组

//最后都会走到直接插入的地步

//希尔排序时间复杂度低

//时间复杂度:O(n^1.5)

#include<stdio.h>
int main(int argc, const char *argv[])
{int arr[]={4,5,3,1,2,6,7,1};int n=sizeof(arr)/sizeof(arr[0]);int k=n/2;int j;while(k>=1){for(int i=k;i<n;i=i+k){int temp=arr[i];for(j=i-k;j>=0&&temp<arr[j];j=j-k){arr[j+k]=arr[j];}arr[j+k]=temp;}k=k/2;}for(int i=0;i<n;i++){printf("%d\t",arr[i]);}return 0;
}

// 快排n*logn

//、从待排序的序列中,任意选择一个元素作为基准

// 2、将其他元素与基准进行比较,分为大小两个部分

// 3、再对各个部分重新选定基准,并以上述两步重复进行,直到每个部分只剩一个元素为止

#include<stdio.h>
int oneSort(int arr[],int low,int high)
{int key=arr[low];while(low<high){while(low<high&&key<=arr[high]){high--;}arr[low]=arr[high];while(key>=arr[low]&&low<high){low++;}arr[high]=arr[low];}arr[low]=key;return low;
}
void Quick(int arr[],int low,int high)
{//	if(low==high){//		return;//	}
//	if(low>=high){
//		return;
//	}if(low<high){int mid=oneSort(arr,low,high);Quick(arr,low,mid-1);Quick(arr,mid+1,high);}
}int main(int argc, const char *argv[])
{int arr[]={1,2,4,9,6,3,2,1};int len=sizeof(arr)/sizeof(arr[0]);Quick(arr,0,len-1);for(int i;i<len;i++){printf("%d\t",arr[i]);}return 0;
}

二路归并:将待排序序列以中间值mid为界均分为左右两部分,左右两部分继续均分,直到序列中只有一个元## 素为止,逐级将左右两部分有序合并到一个新数组中**

#include<stdio.h>
void combin(int arr[],int low,int high,mid)
{int len=high-low+1;int temp[len];int i=low,j=mid+1,k=0;while(i<mid&&j<=high){if(arr[i]<=arr[j]){temp[k++]=arr[i++]}else{temp[k++]=arr[j++];}}while(i<=mid){temp[k++]=arr[i++];}while(j<=high){temp[k++]=arr[j++];}for(int i=0;i<len;i++){arr[low++]=temp[i++];}
}
void guibing(int arr[],int low,int high)
{if(low>=high){return;}int mid=(low+high)/2;mergersort(arr,low,mid);mergersort(arr,mid+1,high);combin(arr,low,high,mid);
}
int main(int argc, const char *argv[])
{int arr[]={1,2,3,5,9,6,2,1,3};int len=sizeof(arr)/sizeof(arr[0]);mergersort(arr,0,len-1);return 0;
}

查找:给定关键字,查找关键字是否存在

1> 顺序查找O(n)

1.1 存在性查找:查找数据是否存在

1.2 个数查找:查找关键字存在几次

2>折半查找:有顺序的顺序存储

注意:折半查找只能对有序序列进行查找

时间复杂度:O(n/2)**

//存在返回下标,失败返回-1
int halfSearch(int arr[],int low,int high,int key)
{int mid;while(low<=high){mid=(low+high)/2;if(key==arr[mid]){return mid;}else if(key>arr[mid]){low=mid+1;}else{high=mid-1;}}return -1;
}
int main(int argc, const char *argv[])
{/*
mid=(low+high)/287
12,32,45,65,  67,87,89,97
LOW      mid            high67   87    89  97low  mid      high    low=mid+1*/int arr[]={12,32,45,65,67,87,89,97};int len=sizeof(arr)/sizeof(arr[0]);int key;printf("输入查找的值:");scanf("%d",&key);int flag=halfSearch(arr,0,len-1,key);if(flag==-1)printf("%d不存在\n",key);elseprintf("在%d下表出现",flag);return 0;
}//存在返回下标,失败返回-1

相关文章:

基础算法(直接插入,希尔排序,快排,归并,折半查找)

/*直接插入&#xff1a;把待排序序列分为有无序区和和无序区&#xff0c;使用无序区的数据一次插入倒有序区中&#xff0c;最终结果尾有序序列 1> 把数据分为有序区和无序区&#xff0c;默认第一个元素在有序区&#xff0c;剩下在无序区 2> 外层循环&#xff0c;循环无…...

电子学会2022年12月青少年软件编程(图形化)等级考试试卷(一级)答案解析

目录 一、单选题(共25题&#xff0c;共50分) 二、判断题(共10题&#xff0c;共20分) 三、编程题(共2题&#xff0c;共30分) 青少年软件编程&#xff08;图形化&#xff09;等级考试试卷&#xff08;一级&#xff09; 一、单选题(共25题&#xff0c;共50分) 1. 小明想在开始…...

基于JAVA的超级玛丽设计与实现

技术&#xff1a;Java等摘要&#xff1a;随着计算机技术及网络技术的不断发展&#xff0c;电子游戏越来越普及。经典游戏“超级玛丽”因其本身所具有的娱乐性与教育意义而被人们广泛接受&#xff0c;在广大的青少年玩家中享有极高的知名度。Java语言作为一种完全面向对象的程序…...

硬件工程师入门基础知识(一)基础元器件认识(二)

硬件工程师入门基础知识 &#xff08;一&#xff09;基础元器件认识&#xff08;二&#xff09; tips&#xff1a;学习资料和数据来自《硬件工程师炼成之路》、百度百科、网上资料。 1.二极管 2.三极管 3.MOS管 4.IGBT 5.晶振 1.二极管 肖特基二极管和硅二极管的比较&#…...

Python-项目实战--贪吃蛇小游戏-游戏框架搭建(2)

1.游戏框架搭建介绍pygame开发图像界面游戏的几个要素&#xff0c;并且把贪吃蛇游戏的整体框架搭建完成本节知识点包括&#xff1a;pygame的初始化和退出游戏主窗口游戏循环和游戏时钟主窗口背景颜色绘制文本pygame的坐标系游戏事件监听绘制图形定时器事件1.1pygame的初始化和退…...

JVM基础

JVM基础 1.JVM的位置 JVM是运行在操作系统之上的&#xff0c;它与硬件没有直接的交互 2.JVM体系结构图 这个区域一定不会有垃圾回收 所谓JVM的调优&#xff0c;其实就是在调这个区域&#xff0c;而且99%情况下都在调堆 ! 3.类加载器ClassLoader 先来看看一个类加载到 JVM 的…...

Android 内存优化(基础轮)必看~

本次分享主要分为五个部分内容&#xff0c;第一部分内容是 5W2H 分析内存优化&#xff0c;第二部分内容是内存管理机制&#xff0c;第三部分内容是内存优化 SOP&#xff0c;第四部分内容是 内存优化指导原则&#xff0c; 最后一部分内容是总结与展望。 如果学完内存优化的基础论…...

STM32单片机GSM短信自动存取快递柜

实践制作DIY- GC0104-自动存取快递柜 一、功能说明&#xff1a; 基于STM32单片机设计-自动存取快递柜 二、功能介绍&#xff1a; STM32F103C系列最小系统板0.96寸OLED显示器DY-SV17F串口语音播报模块4*4矩阵键盘GSM短信模块4路舵机&#xff08;模拟4个柜子&#xff09; ***…...

力扣(LeetCode)410. 分割数组的最大值(2023.02.12)

给定一个非负整数数组 nums 和一个整数 m &#xff0c;你需要将这个数组分成 m 个非空的连续子数组。 设计一个算法使得这 m 个子数组各自和的最大值最小。 示例 1&#xff1a; 输入&#xff1a;nums [7,2,5,10,8], m 2 输出&#xff1a;18 解释&#xff1a; 一共有四种方法…...

管理还原数据

还原数据还原数据是&#xff1a;• 原始的、修改之前的数据副本• 针对更改数据的每个事务处理而捕获• 至少保留到事务处理结束• 用于支持&#xff1a;– 回退操作– 读取一致性查询– Oracle 闪回查询、Oracle 闪回事务处理和 Oracle 闪回表– 从失败的事务处理中进行恢复存…...

c的关键字有那些

编程语言中的关键字 C语言简洁、紧凑&#xff0c;使用方便、灵活。ANSI C标准C语言共有32个关键字&#xff0c;9种控制语句&#xff0c;程序书写形式自由&#xff0c;区分大小写。把高级语言的基本结构和语句与低级语言的实用性结合起来。 C 语言可以像汇编语言一样对位、字节和…...

链表OJ(一)

目录 从尾到头打印链表_牛客题霸_牛客网 160. 相交链表 141. 环形链表 142. 环形链表 II 138. 复制带随机指针的链表 从尾到头打印链表_牛客题霸_牛客网 输入一个链表的头节点&#xff0c;按链表从尾到头的顺序返回每个节点的值&#xff08;用数组返回&#xff09;。 如输入…...

MySQL第三次作业

1、显示所有职工的基本信息。 2、查询所有职工所属部门的部门号&#xff0c;不显示重复的部门号。 3、求出所有职工的人数。 4、列出最高工和最低工资。 5、列出职工的平均工资和总工资。 6、创建一个只有职工号、姓名和参加工作的新表&#xff0c;名为工作日期表…...

Python中的类和对象(7)

1.私有变量 在大多数面向对象的编程语言中&#xff0c;都存在着私有变量&#xff08;private variable&#xff09;的概念&#xff0c;所谓私有变量&#xff0c;就是指通过某种手段&#xff0c;使得对象中的属性或方法无法被外部所访问。 Python 对于私有变量的实现是引入了一…...

【JVM】7种经典的垃圾收集器

文章目录1. 垃圾收集器概述2. Serial 收集器3. ParNew 收集器4. Paraller Scavenge 收集器5. Serial Old收集器6. Parller Old收集器7. CMS 收集器8. Garbage First 收集器本文参考&#xff1a;深入理解Java虚拟机&#xff1a;JVM高级特性与最佳实践&#xff08;第3版&#xff…...

2023/2/12总结

滑动窗口&#xff08;1&#xff09;滑动窗口是一种基于双指针的思想&#xff0c;两个指针指向的元素形成一个窗口。一般用于求取数组或字符串的某个子串、子序列、最长最短等最值或者求某个目标值时&#xff0c;并且该问题本身可以通过暴力解决。滑动窗口分为固定窗口和不定窗口…...

Linux之正则表达式

正则表达式是组成“操作”的基本语法&#xff0c;而这些“操作”是应用于Sed和Awk必备的能力。因此只有了解了正则表达式&#xff0c;才能学好Sed和Awk。正则表达式分为基础正则表达式&#xff08;Regular Expression&#xff09;与扩展正则表达式&#xff08;Extended Regular…...

前端高频面试题-HTML和CSS篇(一)

&#x1f4bb; 前端高频面试题-HTML和CSS篇&#xff08;一&#xff09; &#x1f3e0;专栏&#xff1a;前端面试题 &#x1f440;个人主页&#xff1a;繁星学编程&#x1f341; &#x1f9d1;个人简介&#xff1a;一个不断提高自我的平凡人&#x1f680; &#x1f50a;分享方向…...

Redis 专题总结

1. 什么是Redis &#xff1f; 处理&#xff1a;内容缓存&#xff0c;主要用于处理大量数据的高访问负载。Redis是一款高性能的NOSQL系列的非关系型数据库&#xff0c;NoSQL(NoSQL Not Only SQL)&#xff0c;意即“不仅仅是SQL”&#xff0c;是一项全新的数据库理念&#xff0…...

【Python百日进阶-Web开发-Vue3】Day515 - Vue+ts后台项目2:登录页面

文章目录 一、创建登录路由1.1 安装 Vue VSCode Snippets插件1.2 处理路径引用的红色波浪线1.3 入口文件 main.ts1.4 主组件 App.vue1.5 路由文件 router/index.ts1.6 首页组件 views/HomeView.vue1.7 登录组件 views/LoginView.vue二、实现登录页面的表单展示2.1 element-plus…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心&#xff0c;直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法&#xff0c;涵盖基础规则、优化算法和容错机制&#xff1a; 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则&#xff1a; 大尺寸/重量积木在下&#xf…...

Pydantic + Function Calling的结合

1、Pydantic Pydantic 是一个 Python 库&#xff0c;用于数据验证和设置管理&#xff0c;通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发&#xff08;如 FastAPI&#xff09;、配置管理和数据解析&#xff0c;核心功能包括&#xff1a; 数据验证&#xff1a;通过…...

【Java多线程从青铜到王者】单例设计模式(八)

wait和sleep的区别 我们的wait也是提供了一个还有超时时间的版本&#xff0c;sleep也是可以指定时间的&#xff0c;也就是说时间一到就会解除阻塞&#xff0c;继续执行 wait和sleep都能被提前唤醒(虽然时间还没有到也可以提前唤醒)&#xff0c;wait能被notify提前唤醒&#xf…...

qt 双缓冲案例对比

双缓冲 1.双缓冲原理 单缓冲&#xff1a;在paintEvent中直接绘制到屏幕&#xff0c;绘制过程被用户看到 双缓冲&#xff1a;先在redrawBuffer绘制到缓冲区&#xff0c;然后一次性显示完整结果 代码结构 单缓冲&#xff1a;所有绘制逻辑在paintEvent中 双缓冲&#xff1a;绘制…...

Modbus转ETHERNET IP网关:快速冷却系统的智能化升级密钥

现代工业自动化系统中&#xff0c;无锡耐特森Modbus转Ethernet IP网关MCN-EN3001扮演着至关重要的角色。通过这一技术&#xff0c;传统的串行通讯协议Modbus得以在更高速、更稳定的以太网环境中运行&#xff0c;为快速冷却系统等关键设施的自动化控制提供了强有力的支撑。快速冷…...