Java常见排序

news/2024/10/9 15:21:48/

1、冒泡排序(从小到大排序)

相邻的元素两两比较,小的放左边,大的放右边

第一轮比较完毕之后,最大值就已经确定了,第二轮比第一轮少循环一次,后面以此类推

如果数据中有n个数据,我们只需要比较n-1轮的代码即可

/*** 冒泡排序* *///定义数组int[] arr={2,4,5,3,1};//外循环,表示我要执行多消耗轮,如果 有n个数据,就执行n-1轮for (int i = 0; i < arr.length-1; i++) {//内循环:表示每一轮中,我如何比较并找到当前的最大值//-1:为了预防索引越界//-i:提高效率,每一轮执行的次数比上一轮少一次for (int j = 0; j < arr.length-1-i; j++) {if(arr[j]>arr[j+1]){int temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}System.out.println(Arrays.toString(arr));

2、选择排序(从小到大排序)

从0索引开始,跟后面的元素一一比较

小的放前面,大的放后面

第一轮结束之后,最小的数据已经确定

第二轮循环从1索引开始以此类推

 //选择排序int[] arr={3,5,1,4,2};//外循环:几轮//i,表示在这轮中,我要拿着哪个索引上的数据跟后面的数据一一对比for (int i = 0; i < arr.length; i++) {//内循环:每一轮我要干什么//拿着i跟i后面的数据进行比较for (int j = i+1; j < arr.length; j++) {if(arr[i]>arr[j]){int temp=arr[i];arr[i]=arr[j];arr[j]=temp;}}}

3、插入排序

将0索引的元素到n索引的元素看做是有序的,把n+1索引的元素到最后一个当成是无序的,遍历无序的数据,将遍历到的元素插入有序序列中适当的位置,如遇到相同的数据,插在后面

n的范围:0~最大索引

 //插入排序int[] arr={3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};//1.找到无序的那一组数据是从哪个索引开始int start=-1;for (int i = 0; i < arr.length; i++) {if(arr[i]>arr[i+1]){//表示有序的那一组数据,到哪里结束start=i+1;break;}}//遍历从start开始到最后一个元素,依次得到无序的那一组数据的每一个元素for (int i = start; i < arr.length; i++) {//记录当前要插入数据的索引int j=i;while(j>0&&arr[j]<arr[j-1]){//交换位置int temp=arr[j];arr[j]=arr[j-1];arr[j-1]=temp;j--;}}System.out.println(Arrays.toString(arr));

4、递归算法

递归是指方法中调用方法本身的现象,把一个复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解

递归一定要有出口,否则就会出现内存溢出。

例子:求1-100之间的和

public class Test04 {public static void main(String[] args) {//递归算法 1-100之间的和//拆问题//1-100的和=100+(1-99之间的和)//1-99的和=99+(1-98之间的和)//1-98的和=98+(1-97之间的和)//...//1-2的和=2+(1-1之间的和)//1-1的和=1(递归的出口)System.out.println(getSum(100));}public static int getSum(int num){if(num==1){return 1;}return num+getSum(num-1);}
}

5、快速排序

第一轮,把0索引的数字作为基准数,确定基准数在数组中的正确位置,比基准数小的全部在左边,比基准数大的全部在右边

public class Test06 {public static void main(String[] args) {//快速排序int[] arr={6,1,2,7,9,3,4,5,10,8};quickSort(arr,0,arr.length-1);System.out.println(Arrays.toString(arr));}/**** 参数1:要排序的数组* 参数2:要排序 数组的起始位置* 参数3:要排序数组的结束索引*/public static  void quickSort(int[] arr,int i,int j){//定义两个变量记录要查找的范围int start=i;int end=j;if(start>end){//递归出口return;}//记录基准数int baseNum=arr[i];//利用循环找到要交换的数据while (start!=end){//利用end,从后往前找,找到比基准数要小的数据while (true){if(end<=start||arr[end]<baseNum){break;}end--;}//利用start,从前往后找,找到比基准数要大的数据while (true){if(end<=start||arr[start]>baseNum){break;}start++;}//把end和start指向的元素进行交换int temp=arr[start];arr[start]=arr[end];arr[end]=temp;}//当start和end指向了同一个元素的时候,那么上面的循环就会结束//表示已经找到了基准数在数组中应存入的位置//基准数归位int temp=arr[i];arr[i]=arr[start];arr[start]=temp;//确定6左边的范围,重复刚刚的操作quickSort(arr,i,start-1);quickSort(arr,start+1,j);}
}


http://www.ppmy.cn/news/1441401.html

相关文章

物联网实战--平台篇之(一)架构设计

本项目的交流QQ群:701889554 物联网实战--入门篇https://blog.csdn.net/ypp240124016/category_12609773.html 物联网实战--驱动篇https://blog.csdn.net/ypp240124016/category_12631333.html 一、平台简介 物联网平台这个概念比较宽&#xff0c;大致可以分为两大类&#x…

C#Guid(全局唯一标识符)

当使用C#开发应用程序时&#xff0c;Guid&#xff08;全局唯一标识符&#xff09;是一个常用的数据类型。它用于生成、操作和表示唯一的标识符。下面是对Guid的详细解释&#xff0c;并附带一些示例说明&#xff1a; 定义和结构&#xff1a; Guid 是 System.Guid 结构的别名。它…

React中,双花括号和单花括号的区别

在React中&#xff0c;花括号 {} 用于在JSX中插入JavaScript表达式。 单花括号 {}&#xff1a;通常用于在JSX中嵌入JavaScript表达式。这些表达式可以是变量、函数调用、对象字面量、数组等。React会评估这些表达式&#xff0c;并将结果插入到JSX中。 例如&#xff0c;在你的代…

Elasticsearch概念 使用docker安装Elasticsearch和kibana

目录 一、Elasticsearch概念 倒排索引和正向索引 正向和倒排 二、ES安装 三、安装 kibana 四、IK分词器 下载ES中文分词器 扩展或停用词条 一、Elasticsearch概念 倒排索引和正向索引 正向索引 就像在mysql数据中搜索非主键字段的内容&#xff0c;就需要逐条数据的去查…

Linux---为什么会有粘滞位?

在前面已经讲过目录的rwx权限&#xff1a; 可读权限(r): 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容. 有可写权限(w):如果目录没有可写权限&#xff0c;则无法在目录中创建文件, 也无法在目录中删除文件.可执行权限(x): 如果目录没有可执行权限, 则无法cd到…

如何替代传统的方式,提高能源企业敏感文件传输的安全性?

能源行业是一个关键的基础设施领域&#xff0c;它涉及能源的勘探、开采、生产、转换、分配和消费。随着全球经济的发展和人口的增长&#xff0c;能源需求持续上升&#xff0c;这对能源行业的可持续发展提出了挑战。能源行业的传输场景多种多样&#xff0c;需要重点关注能源企业…

大语言模型在专业领域的应用——教育场景下的大语言模型

教育场景下的大语言模型 构建教育相关的大语言模型数据资源总结教育是人类社会进步的基石,对个人和社会发展都至关重要。在教育系统中,大语言模型已经被用于多种教育相关任务,有助于增强教育场景的智能化、自动化和个性化。 构建教育相关的大语言模型 通常来说,教育应用系…

《Git---Windows Powershell提交信息中文乱码解决方案》

解释&#xff1a; Windows PowerShell中的Git乱码通常是因为字符编码不正确或Git配置不支持Windows系统的默认编码导致的。Git在处理文件时可能使用UTF-8编码&#xff0c;而Windows系统的命令行工具&#xff08;如PowerShell&#xff09;默认使用的是Windows-1252或GBK编码。 …