【八大排序(四)】归并排序 冒泡排序 计数排序

server/2024/10/21 23:00:49/

❣博主主页: 33的博客❣
▶️文章专栏分类:八大排序◀️
🚚我的代码仓库: 33的代码仓库🚚
🫵🫵🫵关注我带你了解更多排序知识

在这里插入图片描述

目录标题

  • 1.前言
  • 2.归并排序
    • 2.1概念
    • 2.2画图理解
    • 2.3代码实现
  • 3.冒泡排序
    • 3.1概念
    • 3.2画图理解
    • 3.3代码实现
  • 4.计数排序
    • 4.1基本概念
    • 4.2画图理解
    • 4.3代码实现
  • 5.总结

1.前言

这学习数组的时候,我们已经学会将两个有序数组合并成一个有序数组,在归并排序中就需要用到这一思想,接下来我们就一起学习归并排序吧。

2.归并排序

2.1概念

归并排序建立在归并操作上的一种有效的算法>排序算法,该算法是采用分治法的一个非常典型的应用,将已有的子序列合并,得到完全有序的序列,即先使每个子序列有序,再使子序列段间有序。

2.2画图理解

归并排序

在这里插入图片描述
在这里插入图片描述

2.3代码实现

java"> public int[] mergeOrder(int[] arr){mergeFun(0,arr.length-1,arr);return arr;}public void mergeFun(int l,int r,int[] arr){if (l>=r){return;}int mid=(l+r)/2;//分解mergeFun(l,mid,arr);mergeFun(mid+1,r,arr);//归并merge(l,r,mid,arr);}private void merge(int l, int r,int mid ,int[] arr) {int s1=l;int e1=mid;int s2=mid+1;int e2=r;int[] tmp=new int[r-l+1];int i=0;while (s1<=e1&&s2<=e2){if(arr[s1]<=arr[s2]){tmp[i]=arr[s1];i++;s1++;}else {tmp[i]=arr[s2];i++;s2++;}}while (s1<=e1){tmp[i]=arr[s1];i++;s1++;}while (s2<=e2){tmp[i]=arr[s2];i++;s2++;}for (int j=0;j<tmp.length;j++){arr[j+l]=tmp[j];}}

1. 时间复杂度:O(NlogN)
2. 空间复杂度:O(N)
3. 稳定性:稳定
*

3.冒泡排序

3.1概念

相对来说,冒泡排序是大家最熟悉的一种算法>排序算法吧,冒泡排序是一种交换排序::所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。

3.2画图理解

冒泡排序


在这里插入图片描述

3.3代码实现

java">private void swap(int i, int j,int[] arr) {int tmp=arr[i];arr[i]=arr[j];arr[j]=tmp;}
public int[] Buble(int[] arr){boolean flag=true;for(int i=0;i<arr.length-1;i++){for (int j=0;j<arr.length-i-1;j++){if (arr[j]>arr[j+1]){swap(j,j+1,arr);flag=false;}}if (flag){return arr;}}return arr;}

1. 时间复杂度:O(N^2)
2. 空间复杂度:O(1)
3. 稳定性:稳定

在之前所学习到的算法>排序算法都是基于比较的,那有没有什么算法是不通过比较也能进行排序呢?当然是有的,那就是计数排序。

4.计数排序

4.1基本概念

计数统计就是就是先统计相同元素出现的次数,出现次数每多一次,对应的数组下标就++,根据统计的结果将序列收回到原来的序列中。

4.2画图理解

计数排序

在这里插入图片描述

4.3代码实现

java">public int[] countOrder(int[] arr){int max=arr[0];int min=arr[0];for (int i=0;i<arr.length;i++){if(arr[i]>max){max=arr[i];}}for (int i=0;i<arr.length;i++){if(arr[i]<min){min=arr[i];}}int[] tmp=new int[max-min+1];for (int i=0;i<arr.length;i++){tmp[arr[i]-min]++;}
//写回arrint index=0;for (int i=0;i<tmp.length;i++){while (tmp[i]>0){arr[index]=i+min;index++;tmp[i]--;}}return arr;}

1.时间复杂度:O(MAX(N,范围))
2. 空间复杂度:O(范围)
3. 稳定性:稳定

5.总结

我们已经详细学习了八大排序的所有算法>排序算法,我们需要掌握各个排序时间复杂度,空间复杂度和稳定性。

排序方法时间复杂度空间复杂度稳定性
冒泡排序O(n^2)O(1)稳定
插入排序O(n^2)O(1)稳定
归并排序O(n * log(n))O(n)稳定
选择排序O(n^2)O(1)不稳定
希尔排序O(n^1.3-1.5)O(1)不稳定
堆排序O(n*log(n))O(1)不稳定
快速排序O(n*log(n))O(log(n))不稳定

下期预告:Map和Set


http://www.ppmy.cn/server/30857.html

相关文章

Linux基础——Linux开发工具(下)_make/makefile

前言&#xff1a;在经过前面两篇学习&#xff0c;大家对Linux开发工具都有一定的了解&#xff0c;而在此之前最重要的两个工具就是vim&#xff0c;gcc。 如果对这两个工具不太了解&#xff0c;可以先阅读这两篇文章&#xff1a; Linux开发工具 (vim) Linux开发工具 (gcc/g) 首先…

前端请求没问题,后端正常运行,但查不出数据

写代码时写得快了些&#xff0c;Orders.的订单状态写错了CONFIRMED 改成COMPLETED

如何买到“30元以下”的免备案服务器?

对于预算有限的个人和小型企业来说&#xff0c;30 元以下免备案服务器的价格非常亲民。用户可以以极低的成本获得所需的服务器资源&#xff0c;这对创业者、个人开发者、学生和站长来说简直不要太划算&#xff0c;毕竟配置可以升级真不够后面再付费升级也行。 何为“免备案”&…

QT的TcpServer

Server服务器端 QT版本5.6.1 界面设计 工程文件&#xff1a; 添加 network 模块 头文件引入TcpServer类和TcpSocket&#xff1a;QTcpServer和QTcpSocket #include <QTcpServer> #include <QTcpSocket>创建server对象并实例化&#xff1a; /*h文件中*/QTcpServer…

centos 中使用 kubekey 安装 k8s v1.22.12 支持 GPU 调用

环境准备&#xff1a; https://blog.csdn.net/m0_64519023/article/details/138184970 生成配置文件&#xff1a; 中间需要执行 ./kk create config --with-kubernetes v1.22.12 这个命令生成配置文件&#xff0c;保留生成的配置文件中 spec: hosts 下的 node1&#xff0c;将…

EMP.DLL是什么东西?游戏提示EMP.DLL文件缺失怎么解决

emp.dll文件是Windows操作系统中的一种动态链接库文件&#xff0c;它被设计为可以被多个程序共享使用的模块化文件。这种设计旨在提高系统效率&#xff0c;减少内存消耗&#xff0c;并简化软件的维护和更新。DLL文件通常包含了一系列相关的函数和变量&#xff0c;这些函数和变量…

YOLOv5白皮书-第Y6周:模型改进

YOLOv5白皮书-第Y6周&#xff1a;模型改进 YOLOv5白皮书-第Y6周&#xff1a;模型改进一、前言二、我的环境三、更正后的yolov5s.yaml四、运行截图![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/23c3ac6b05d74bfcbea5ec238681710d.png)五、总结 YOLOv5白皮书-第Y6周…

ubuntu20.04安装RabbitMQ 3.11.19+Erlang 25.3.1

1、检查RabbitMQ、Erlang版本 Erlang Version Requirements | RabbitMQ 2、ubuntu20.04对应的是 focal 3、下载安装Erlang 下载地址&#xff1a;http://packages.erlang-solutions.com/erlang/debian/pool/ sudo dpkg -i esl-erlang_25.3-1~ubuntu~focal_amd64.deb sudo apt…