八大排序算法
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e5+10;
int q[N];
int w[N],s[N];
int n,sz;
//直接插入排序 ,对于某一个元素加入到一个有序的序列中,将该元素依次从该位置开始
//从后往前比较,
//大于该元素的都往后挪一位,直到找到比他小的元素,将该元素插入到比他小的元素的后面。
//
void insert_sort(){for(int i=0;i<n;i++){ // 这里i=1 开始也对int t=q[i],j=i;while(j>0&&q[j-1]>t){swap(q[j],q[j-1]); // 这里写成q[j]=q[j-1] 也对j--;}q[j]=t;}
}
//折半插入排序 就是在排序的基础上进行二分优化,就是在“将该元素依次从后往前比较”
//这一步中 直接通过二分找到比他小的最大元素
void binary_search_insert_sort(){for(int i=0;i<n;i++){int t=q[i];if(t>=q[i-1]){q[i]=t;continue;}int l=0,r=i;while(l<r){int mid=l+r>>1;if(q[mid]>t) r=mid;else l=mid+1;}for(int j=i-1;j>=r;j--){q[j+1]=q[j];}q[r]=t;}
}
//冒泡排序 a,b,c,d 从后往前依次做 if c > d 交换二者位置,这样每遍历一次,可以将
//第 i 小的数 放在第i个位置 一共只需要做n-1次。
//y总写的这个是把小的往前冒
//也可以把大的往后冒
void bubble_sort(){for(int i=0;i<n-1;i++){bool has_swap=false;//小优化 如果说当前遍历的过程中,没发生一次交换,说明//当前序列已经是有序的了 可以直接breakfor(int j=n-1;j>i;j--){if(q[j]<q[j-1]) {swap(q[j],q[j-1]);has_swap=true;}}if(!has_swap) break;}
}
//最简单的一集,依次从前往后遍历,每次把后面的最小的一个选出来 放到当前位置。
//总共需要遍历n-1次,因为最后一个位置肯定是符合有序的
void select_sort(){for(int i=0;i<n-1;i++){int k=i;for(int j=i+1;j<n;j++){if(q[j]<q[k]){k=j;}}swap(q[k],q[i]);}
}
//希尔排序:分组+插入排序
void shell_sort(){for(int d=n/3;d;d = d == 2 ? 1 : d / 3){ // 因为希尔排序最后要求公差必须是1//但你每次除三到最后不一定是1 可能是2 2的话我们令公差为1for(int start=0;start<d;start++){for(int i=start+d;i<n;i+=d){int t=q[i],j=i;while(j>start&&t<q[j-d]){swap(q[j],q[j-d]);j=j-d;}q[j]=t;}}}
}
//具体理解 可以参考B站动画演示
void quick_sort(int l,int r){if(l>=r) return;int i=l-1,j=r+1,x=q[(l+r)>>1];while(i<j){do i++;while(q[i]<x);do j--;while(q[j]>x);if(i<j) swap(q[i],q[j]);}quick_sort(l,j);quick_sort(j+1,r);
}
//堆排序要从下标1开始,具体过程可以参考B站动画演示
void down(int t){int u=t;if(u*2<=sz&&q[u*2]>q[t]) t=u*2;if(u*2+1<=sz&&q[u*2+1]>q[t]) t=u*2+1;if(u!=t){ //如果t不是叶子结点 且与儿子结点发生了交换 那么需要递归重新构建儿子的大根堆swap(q[u],q[t]);down(t);//重新构建叶子节点大根堆}
}
void heap_sort(){sz=n;for (int i = n / 2; i; i -- ) down(i);//从最大的非叶子结点开始 将原数组变为一个大根堆for(int i=0;i<n-1;i++){swap(q[1], q[sz]); // 将堆顶与堆低元素互换 sz -- ;//并且删除堆低元素down(1);//因为发生了交换 破坏了原有的大根堆 需要重新构造大根堆}
}
//归并排序
void merge_sort(int l,int r){if(l>=r) return;int mid=l+r>>1;merge_sort(l,mid),merge_sort(mid+1,r);int i=l,j=mid+1,k=0;while(i<=mid&&j<=r){if(q[i]<=q[j]) w[k++]=q[i++];else w[k++]=q[j++];}while(i<=mid) w[k++]=q[i++];while(j<=r) w[k++]=q[j++];for(i=l,j=0;i<=r;i++,j++) q[i]=w[j];
}
void bucket_sort(){for(int i=0;i<n;i++) s[q[i]]++;for(int i=1;i<N;i++) s[i]=s[i]+s[i-1];for(int i=n-1;i>=0;i--) w[--s[q[i]]]= q[i];// 举个例子 5 3 4 1 1 //s[1]=2 则w[--2]=1 也即w[1]=1 第1个位置应该放后一个1 //s[1]=1 则w[--1]=1 也即w[0]=1 第0个位置应该放前一个1 (先后顺序未发生改变稳定!)//s[4]=4 则w[--4]=4 也即w[3]=4 第三个位置应该放4//s[3]=3 则w[--3]=3 也即w[2]=3 第二个位置应该放3//s[5]=5 则w[--5]=5 也即w[4]=5 第四个位置应该放5//倒着排序可以保证稳定性for(int i=0;i<n;i++) q[i]=w[i];
}
int main(){cin >> n;for(int i=0;i<n;i++){cin >> q[i];}//insert_sort();//binary_search_insert_sort();//bubble_sort();//select_sort();//shell_sort();//quick_sort(0,n-1);//heap_sort();//merge_sort(0,n-1);bucket_sort();for(int i=0;i<n;i++){cout << q[i] << " ";}return 0;
}
相关文章:
八大排序算法
#include<iostream> #include<cstring> #include<algorithm> using namespace std; const int N1e510; int q[N]; int w[N],s[N]; int n,sz; //直接插入排序 ,对于某一个元素加入到一个有序的序列中,将该元素依次从该位置开始 //从后往前比较&…...
机器学习笔记 - 两个静态手势识别的简单示例
一、关于手势识别 手势识别方法通常分为两类:静态或动态。 静态手势是那些只需要在分类器的输入处处理单个图像的手势,这种方法的优点是计算成本较低。动态手势需要处理图像序列和更复杂的手势识别方法。 进一步了解可以参考下面链接。 静态手势识别和动态手势识别的区别和技…...
2023年,有哪些好用的互联网项目管理软件?
项目管理是为了使工作项目能够按照预定的需求、成本、进度、质量顺利完成,而对人员、产品、过程和项目进行分析和管理的活动。 一直以来,项目管理被企业管理人员和各级人员所重视,项目管理是一个项目的灵魂,只有做好了项目管理&am…...
python 按照文件大小读取文件
返回一个list,每个list里面是一个元组(filename, file_size),按照file_size从小到大排序的 import osdef get_sorted_files(dir_path):# 存储最后的文件路径files []# 便利dir_path下面的文件或者文件夹for file in os.listdir(dir_path):file_path o…...
黑客帝国代码雨
黑客帝国代码雨奉上,之前一直想写,但一直没抽出时间来,今天把他写了,也算了了装心事 效果图如下 原理就不讲了,代码写的很清楚而且不长 有不懂的评论区问我就好 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8">&l…...
基于SpringBoot的植物健康系统
目录 前言 一、技术栈 二、系统功能介绍 系统首页 咨询专家 普通植物检查登记 珍贵植物检查登记 植物救治用料登记 植物救治材料管理 植物疾病案例管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用&am…...
Kettle连接数据库[MySQL]报错
在连接数据库页面填写完成后点击“测试” 报错信息: 错误连接数据库 [ETLqiangzi] : org.pentaho.di.core.exception.KettleDatabaseException: Error occurred while trying to connect to the databaseDriver class org.gjt.mm.mysql.Driver could not be found…...
Postman接口测试学习之常用断言
什么是断言? 断言——就是结果中的特定属性或值与预期做对比,如果一致,则用例通过,如果不一致,断言失败,用例失败。断言,是一个完整测试用例所不可或缺的一部分,没有断言的测试用例…...
自动化机器学习AutoML之flaml:利用flaml框架自动寻找最优算法及其对应最佳参数python
AutoML 一、自动化机器学习包简介1、H2O (Python,R,Java,Scala)2、auto-sklearn(Linux,Python)3、FLAML(Python)4、AutoGlueon(安装比较啰嗦,略过)二、FLAML1、安装2、方法.fit()常用参数介绍3、代码(1) 解决分类问题(2)解决回归问题一、自动化机器学习包简介 机…...
支付宝sdk商户私钥 如何生成?
1、先下载密钥工具 https://opendocs.alipay.com/isv/02kipk 2、安装后生成密钥 3、配置密钥 4、将工具生成的公钥复制进去生成公钥 简单来说就是私钥是用工具生成的,不会在页面上显示 商户私钥 支付宝公钥...
Linux之epoll理解
IO多路复用有几种实现方式:select poll和epoll。本篇文章对epoll进行总结理解。 IO多路复用的含义,我个人的理解是通过一个线程实现对多个socket的侦听,epoll与select和poll的区别是epoll效率最高。select的最高管理1024个socket并且是通过轮…...
龟速乘 - a * b爆ll且模数很大时的计算方法
LL qmul(LL a, LL k, LL b) {LL res 0;while (k){if (k & 1) res (res a) % b;a (a a) % b;k >> 1;}return res; } 如果int128也会爆掉的话可以用这种方法 也是快速幂的思想,快速幂是乘,这个是加...
计算机网络笔记3 数据链路层
计算机网络系列笔记目录👇 计算机网络笔记6 应用层计算机网络笔记5 运输层计算机网络笔记4 网络层计算机网络笔记3 数据链路层计算机网络笔记2 物理层计算机网络笔记1 概述 文章前言 💗 站在巨人的肩膀上,让知识的获得更加容易!…...
如何实现矩阵的重采样问题
文章目录 前言一、问题描述二、回答 前言 记录知乎的自问自答。 一、问题描述 我的问题是这样的,有两个列向量E和F,需要注意的是,E和F是连续的,可任意插值,得到包含其中的子向量。E和F通过一个mn的矩阵联系起来&…...
Spring-事务管理-加强
目录 开启事务 编程式事务 声明式事务 声明式事务的优点 声明式事务的粒度问题 声明式事务用不对容易失效 Spring事务失效可能是哪些原因 Transactional(rollbackFor Exception.class)注解 Spring 事务的实现原理 事务传播机制 介绍 用法 rollbackFor 场景举例 …...
Minecraft个人服务器搭建自己的皮肤站并实现外置登录更换自定义皮肤组件
Minecraft个人服务器搭建自己的皮肤站并实现外置登录更换自定义皮肤组件 大家好,我是艾西有不少小伙伴非常喜欢我的世界Minecraft游戏,今天小编跟大家分享下Minecraft个人服务器怎么设置皮肤站。 Minecraft皮肤站是什么?其实官网就有皮肤站…...
解决ubuntu中没有网络连接的图标
现象:Ubuntu连接网络 在设置中没有显示网络图标 解决方案: 命令为 sudo nmcli networking off sudo nmcli networking on sudo service network-manager restart 重启ubuntu,网络连接完成...
数据结构基本概念-Java常用算法
数据结构基本概念-Java常用算法 1、数据结构基本概念2、数据逻辑结构3、算法时间复杂度 1、数据结构基本概念 数据(Data):数据是信息的载体,其能够被计算机识别、存储和加工处理,是计算机程序加工的“原材料”。数据元…...
流程图设计制作都有哪些好用的工具
流程图是一种直观的图形表示方式,通常用于显示事物的过程、步骤和关系。在现代工作中,设计师经常需要绘制各种流程图来解释工作过程、产品设计等。本文将为您推荐7个流程图软件,以帮助您快速绘制高效的流程图,并提高工作效率。 即…...
2023-10-7
今日感冒了,整个人都不舒服,现在才 8 点,已经不想学习了。嗓子眼感觉不属于我了,痛死了。然后头也晕。 哎,今天又啥也没干 今日学习: 哎,今天就做了 RWCTF2022-Digging-into-kernel-2 这道题…...
leOS2:基于看门狗定时器的轻量级嵌入式调度器
1. leOS2:基于看门狗定时器的轻量级嵌入式调度器 leOS2(little embedded Operating System 2)是一个专为资源受限的8位AVR微控制器设计的极简实时调度器。它不依赖于通用定时器(如Timer0/Timer1),而是创造…...
避开这些坑!群晖+acme.sh申请Let’s Encrypt证书的完整指南
群晖NAS上零踩坑申请Lets Encrypt证书的终极实践手册 每次看到浏览器地址栏那个刺眼的"不安全"提示就浑身难受?作为群晖深度用户,我花了三个周末时间踩遍了所有证书申请的坑。从idn指令缺失到nss验证失败,从API调用超时到证书自动更…...
GPT-5.4 Pro接入Java!百万上下文+电脑操控,Spring AI集成教程
文章目录前言一、先搞清楚你在驯服什么野兽二、Spring AI Alibaba是什么鬼?核心优势三、环境准备:别在JDK版本上栽跟头四、基础对话:先让AI开口说话五、百万上下文的正确打开方式六、Computer Use:让AI真的动起来实际应用场景七、…...
Flowable 7.x 实战:手把手教你从数据库里捞出BPMN2.0 XML并优雅展示(Vue3 + Spring Boot)
Flowable 7.x 实战:从数据库提取BPMN2.0 XML的工程化实现(Vue3 Spring Boot全链路解析) 在流程引擎的实际应用中,BPMN2.0 XML作为流程定义的标准化载体,其可视化展示能力直接影响开发调试效率。本文将完整演示如何构建…...
告别单打独斗!Apipost 8协作版数据迁移保姆级教程(含团队项目处理)
Apipost 8协作版数据迁移实战:从个人到团队的无缝衔接 第一次打开Apipost 8协作版时,我盯着那个"迁入项目"按钮犹豫了整整十分钟——作为独立开发者,我的旧版本里积累了237个接口文档和56个测试集合,它们就像我精心搭建…...
3000 字深度拆解:Paperxie AI 期刊写作界面全解析 —— 科研人必看的 “投刊效率密码”
paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/期刊论文https://www.paperxie.cn/ai/journalArticleshttps://www.paperxie.cn/ai/journalArticles 一、引言:科研人的投稿困局,藏在每一个被忽略的界面细节里 当科研人熬过无数个深…...
5分钟搞定OpenClaw+GLM-4.7-Flash:星图平台一键部署体验
5分钟搞定OpenClawGLM-4.7-Flash:星图平台一键部署体验 1. 为什么选择云端部署OpenClaw 作为一个长期折腾本地AI部署的技术爱好者,我深知在个人电脑上配置OpenClaw的痛处。从Node.js版本冲突到模型权重下载失败,再到各种依赖库缺失…...
Python实战:从零构建基于腾讯混元大模型的智能客服系统
1. 为什么选择腾讯混元大模型做智能客服 最近两年大模型技术突飞猛进,但真正要把大模型落地到实际业务中,很多开发者都会遇到三个头疼的问题:第一是模型效果不稳定,第二是API调用复杂,第三是业务逻辑难集成。我在帮几…...
H3C交换机堆叠配置实战:从零开始搭建企业级网络环境
H3C交换机堆叠配置实战:从零开始搭建企业级网络环境 在中小型企业的网络架构中,交换机堆叠技术正逐渐成为简化管理、提升可靠性的标配方案。想象一下,当你的机房需要扩容时,不再需要逐台配置新交换机,所有设备如同一个…...
告别官方包:手把手教你为遗留项目编译一个“增强版”Qt5.15.17
告别官方包:手把手教你为遗留项目编译一个“增强版”Qt5.15.17 当官方支持终止后,维护基于Qt5的遗留项目就像在悬崖边行走——你需要稳定性,但又渴望那些关键补丁和完整功能。本文将带你深入探索如何为团队构建一个功能完备的私有Qt工具链&am…...
