软考 - 排序算法

文章目录

    • 1.总览
    • 1.待操作数组
    • 2.直接插入排序(O(n2))
    • 3.希尔排序
    • 4.直接选择排序
    • 5.堆排序
      • 5.1.堆的分类
      • 5.2.原理:
      • 5.3. 堆排序方法:
    • 6.冒泡排序
  • 7.快速排序
  • 8.归并排序
  • 9.基数排序

1.总览

在这里插入图片描述

1.待操作数组

private static int[] ori = {30, 70, 40, 60, 10, 90, 20, 50, 80, 100};

2.直接插入排序(O(n2))

原理:当插入第i个元素时,R1,R2 … Ri-1已经基本有序,将i元素和R1,R2 … Ri-1比较,插入合适的位置。

实现一(原理直译成代码,用两个数组,将原数组元素逐个插入新数组):

    public static int[] straightInsertionSort(int[] ori) {//初始化sortint [] sort = new int[ori.length];//逐个将ori元素插入sortfor (int i = 0; i < ori.length; i++) {int ele = ori[i];if(i == 0){//sort 为空,ele 放入第一位置sort[0] = ele;}else {//sort 不为空,ele 与 sort 逐个比较for (int j = 0; j < sort.length; j++) {if(ele<sort[j]){//ele 小于 当前sort,ele 放入当前位置,sort 其余值后移for (int k = sort.length-1 ; k>j ; k--){sort[k] = sort[k-1];}sort[j] =ele;break;}else if(0==sort[j+1]){ //由于int数组初始化后,每一位默认值都是0,如果下一位为0,当前位就是最后一位//ele 比sort最后一个元素大,放入最后一个位置sort[j+1] =ele;break;}else {//比当前sort大,且当前sort不是最后一个值,就和下一个sort比较continue;}}}}return sort;}

3.希尔排序

原理:R1,R2 … Ri-1,取一个小于i的整数d1作为第一个增量,将所有距离间隔d1的元素放到一组(头和尾,不包括中间),组内直接选择排序;然后取第二个增量d2<d1重复分组和排序,直至dt=1;


4.直接选择排序

原理:R1,R2 … Ri-1,将最小的元素与第1个位置元素交换;在剩余其他元素中选出最小的元素与第2个位置交换;…直至整体都排列好。

    public static int[] straightSelectSort(int[] ori) {int minIndex = 0;//最小数值角标int temp = 0;//交换临时空间for (int i = 0; i < ori.length; i++) {minIndex = i;//最小数值角标初始化为当前i//当前剩余未排序的数组中 选出最小的元素的角标for (int j = i + 1; j < ori.length; j++) {if (ori[minIndex] > ori[j]) {minIndex = j;}}//将最小位置与当前第i位交换temp = ori[i];ori[i] = ori[minIndex];ori[minIndex] = temp;}return ori;}

5.堆排序

5.1.堆的分类

大顶堆:所有父节点都比子节点大;用于从大到小排列;
小顶堆:所有父节点都比子节点小;用于从小到大排列;

5.2.原理:

R1,R2 … Ri-1,将所有元素构建成小顶堆,取出根节点即为最小值。重新调整堆结构,再取出根节点即为次小值…堆排序适合取出前n个值。

5.3. 堆排序方法:

小顶堆的构造方法:先将所有值最为节点构成完全二叉树,从最后一个节点到根节点,根据小顶堆的调整方法调整;
小顶堆的排序方法:取出根节点后,把完全二叉树的最后一个节点放到根节点的位置,从根节点开始,根据小顶堆的调整方法调整;
小顶堆的调整方法:检查当前左右子节点是否都比根节点大,不满足,则交换最小子节点与父节点的位置。如果调整后子节点不为叶子节点,则递归调整以该叶子节点为根节点的树;

在这里插入代码片

6.冒泡排序

原理:相邻的元素进行比较和交换,将排序码小的元素逐渐从底部移到顶部;整个过程就像是水底的气泡逐渐上冒;

    public static void bubbleSort(int[] ori){int temp = 0;//外层循环,每次循环都选出一个最大得放置在数组最后for (int i = 0; i < ori.length-1; i++) {//内层循环,数组末尾放置好的元素不在动for (int j = 0; j < ori.length-1-i; j++) {if (ori[j] > ori[j+1]) {//相邻两个数比较,大的右移temp = ori[j];ori[j] = ori[j+1];ori[j+1] =temp;}}}}

7.快速排序

原理:
分治法(将原问题分解成若干规模更小单结构和原问题相似的子问题,通过递归的解决子问题,将子问题的解组合成原问题的解)
第一步:待排序数组中 ,取一个数作为基准,将所有记录分成两组,第1组都小于基准,第2组都大于基准;
第二布:采用相同的方法对左右两组进行排序,直到所有记录排到相应的位置;

    /** @Description: 快速排序* @param arr: 待排序数组* @param begin: 开始元素角标* @param end: 末尾元素角标* @return void* @see*/private static void quickSort(int[] arr, int begin, int end) {if(begin<end){int index = patition(arr,begin,end);//基准角标(index左侧元素都比arr[index]小,index右侧元素都比arr[index]大)quickSort(arr,begin,index-1);//递归对分区的左侧快速排序quickSort(arr,index+1,end);//递归对分区的右侧快速排序}}/** @Description: 以最后一个元素最为元素基准,将数组分册两个区域* @param arr: 带分区数组* @param begin: 开始元素角标* @param end: 末尾元素角标* @return int 基准角标* @see*/private static int patition(int[] arr, int begin, int end) {int index = begin-1;//基准 初始角标int patition = arr[end];//基准数值 取最后一个元素的值for (int i = begin; i <= end-1; i++) {if(arr[i]<=patition){//当前值比基准值小index++;//index角标右移一位swap(arr,i,index);//把当前元素和index元素的数值交换}}//index角标右移一位的角标,就是第一个比基准数值大的元素,交换两者位置,就实现了快速排序的分区swap(arr,++index,end);return index;}/** @Description: 交换数组两个元素的数值*/private static void swap(int[] arr, int x, int y) {int temp = arr[x];arr[x] = arr[y];arr[y] = temp;}

8.归并排序

原理:先将整个待排序数组分成若干子表;完成子表内的排序;将两个或两个以上的有序子表合并成一个新的有序表(合并过程:比较A[i]和B[j]的排序码,将较小的元素复制到R[k]中,并令i(或j)和k分别加1,如此循环下去,知道A或B比较复制完,将另一个有序表剩余元素复制到R中);

9.基数排序

原理:适用于元素很多,但是关键字很少的序列;例如,多个百以内的数字排序,关键字只有三个,个位,十位,百位。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/515859.shtml

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

相关文章

“数据湖”:概念、特征、架构与案例

写在前面&#xff1a; 最近&#xff0c;数据湖的概念非常热&#xff0c;许多前线的同学都在讨论数据湖应该怎么建&#xff1f;阿里云有没有成熟的数据湖解决方案&#xff1f;阿里云的数据湖解决方案到底有没有实际落地的案例&#xff1f;怎么理解数据湖&#xff1f;数据湖和大数…

DockerFile 入门到精通

文章目录一、DockerFile快速入门1. DockerFile 解析2. DockerFile编写规范3. DockerFile指令二、构建自己centos镜像2.1. 制作Dockerfile2.2. 构建镜像2.3. 运行容器一、DockerFile快速入门 1. DockerFile 解析 一个镜像文件到底是如何创建&#xff1f; dockerfile 描述出镜…

案例解析|广东自由流收费稽核方案,AI稽核新模式

随着取消省界收费站工程落成&#xff0c;我国逐步迈进全国高速公路“一张网”运行感知新时代。借助交通强国和“撤站”政策&#xff0c;2019年12月&#xff0c;广东联合电服和阿里云共同宣布&#xff0c;全国首个高速不停车收费AI稽核项目正式落地广东&#xff0c;在业内率先使…

赠书 | 读懂 x86 架构 CPU 虚拟化,看这文就够了

作者 | 王柏生、谢广军导读&#xff1a;本文摘自于王柏生、谢广军撰写的《深度探索Linux系统虚拟化&#xff1a;原理与实现》一书&#xff0c;介绍了CPU虚拟化的基本概念&#xff0c;探讨了x86架构在虚拟化时面临的障碍&#xff0c;以及为支持CPU虚拟化&#xff0c;Intel在硬件…

nacos 持久化 mysql(windows/linux环境)

文章目录1. 下载nacos-server2. 修改配置3. 创建数据库4. 初始化数据库脚本5. 启动nacos1. 下载nacos-server nacos-server-1.4.3.zip https://github.91chi.fun//https://github.com//alibaba/nacos/releases/download/1.4.3/nacos-server-1.4.3.zip解压 略 2. 修改配置 c…

HSF服务注册失败,项目启动后,EDAS列表无法发现注册的服务

背景&#xff1a; 本地使用edas轻量配置中心进行开发联调。 异常现象&#xff1a; 1.redis和edas已经启动正常&#xff0c;本地http://localhost:8080可以打开&#xff0c;但是配置列表和服务列表为空。 2.项目可以正常启动&#xff0c;但是postman调用时&#xff0c;发生hs…

解密阿里云高效病原体基因检测工具

1.背景介绍 病原体基因检测&#xff0c;为各种严重感染的诊断提供了基础。病原体检测流程分成五个步骤&#xff1a;&#xff08;1&#xff09;采集病人的样本&#xff0c;比方说静脉血&#xff0c;痰液&#xff0c;肺泡灌洗液&#xff0c;或者脑脊髓液等。&#xff08;2&#…

企业使用云计算低效益怎么办?区块链或成良药

作者 | Ged Alexander翻译 | 火火酱,责编 | 晋兆雨出品 | CSDN云计算头图 | 付费下载于视觉中国在云资源浪费现象激增的大环境中&#xff0c;企业如何才能寻得一线生机&#xff1f;借助云计算服务&#xff0c;企业和开发人员能够通过互联网远程组织资源并运行工作负载。全球范围…

基于X-Engine引擎的实时历史数据库解决方案揭秘

实时历史库需求背景 在当今的数字化时代&#xff0c;随着业务的迅速发展&#xff0c;每天产生的数据量会是一个惊人的数量&#xff0c;数据库存储的成本将会越来越大&#xff0c;通常的做法是对历史数据做归档&#xff0c;即将长期不使用的数据迁移至以文件形式存储的廉价存储…

seata 整合 nacos(windows/linux环境)

文章目录一、下载安装nacos-server二、 seata-server下载配置2.1. 下载seata-server-1.4.2.zip2.2. 修改配置2.3. 创建命名空间2.4. 配置registry.conf2.5. 创建数据库2.6. 初始化sql脚本2.7. 配置config.txt2.8. 创建nacos-config.sh2.9. 初始化脚本数据到nacos2.10. 数据验证…

加密相关(对称加密、非对称加密、信息摘要、数字签名、CA数字证书)

1.对称加密&#xff1a; 说明&#xff1a;加密的密钥和解密的密钥相同&#xff1b;效率快&#xff1b;适合加密大信息量 常见算法&#xff1a;DES、3DES、AES、RC-5 块加密&#xff1a; 流加密&#xff1a;数据量大时效率高 2.非对称加密&#xff1a; 说明&#xff1a;加密的…

ClickHouse内核分析-MergeTree的存储结构和查询加速

注&#xff1a;以下分析基于开源 v19.15.2.2-stable 版本进行 引言 ClickHouse是最近比较火的一款开源列式存储分析型数据库&#xff0c;它最核心的特点就是极致存储压缩率和查询性能&#xff0c;本人最近正在学习ClickHouse这款产品中。从我个人的视角来看存储是决定一款数据…

“智汇光大 E启未来” 中国光大集团ESBU协同核心系统1.0正式发布

12月22日&#xff0c;“中国光大集团ESBU协同核心系统1.0”正式发布&#xff0c;标志着光大集团战略和光大数字化发展取得又一重大进展。光大集团党委书记、董事长李晓鹏现场发布“E-SBU协同核心系统”及“光大云生活”超级APP。集团党委副书记、副董事长、总经理吴利军在发布会…

云原生之路:容器技术落地最佳实践

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 阿里妹导读&#xff1a;随着容器技术的快速发展和广泛应用&#xff0c;毫无疑问云原生技术是未来发展的必然趋势。作为国内最…

SpringBoot微服务项目构建war包 部署排除指定jar

文章目录一、构建war包部署SpringBoot项目二、构建war包2.1. 适用范围2.2. 构建war包三、部署排除指定jar3.1. 下载排除插件3.2. 搜索部署排除指定jar3.3. 排除部署指定jar3.4. 验证3.5. 核心理念一、构建war包部署SpringBoot项目 如何把springboot项目构架war包部署到tomcat上…

软件设计师 - 算法思想

文章目录递归和迭代软考常见算法思想分治法回溯法贪心法动态规划法递归和迭代 递归&#xff1a;函数不断的调用自己&#xff0c;存在终止条件&#xff0c;分为递推和回归两部分&#xff1b; 迭代&#xff1a;不断用变量的旧值递推新值的过程&#xff0c;当前保存的结果作为下一…

毕业两年升主管,自沉稳而后顾人 对话阿里云MVP陈琦

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 简介&#xff1a; 1993年出生&#xff0c;毕业2年&#xff0c;团队主管&#xff0c;这是我对陈琦产生好奇的原因。但随着他优…

极道创始人吴江:企业级数据系统,初创一样可以做出好产品

随着云、大数据炒作热度褪去&#xff0c;对数据的存储计算技术正在回归理性。在存储这条传统toB市场的赛道上&#xff0c;创业远比toC市场复杂艰难许多。近日&#xff0c;一家以分布式文件存储创业&#xff0c;集合了存储计算与数据分析的初创公司——极道&#xff0c;表示从20…

2020年阿里云年中大促【福利】【选品】全攻略

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 2020年阿里云年中大促活动于6月1日正式上线啦&#xff01;活动时间为&#xff1a;2020年6月1日至2020年6月30日主会场链接&am…

使用Istio进行多集群部署管理(2):单控制平面Gateway连接拓扑

单控制平面拓扑下&#xff0c;多个 Kubernetes 集群共同使用在其中一个集群上运行的单个 Istio 控制平面。控制平面的 Pilot 管理本地和远程集群上的服务&#xff0c;并为所有集群配置 Envoy Sidecar 代理。 集群感知的服务路由 Istio 1.1 中引入了集群感知的服务路由能力&am…