冒泡排序(Bubble Sort)、快速排序(Quick Sort)和归并排序(Merge Sort)

冒泡排序
冒泡排序是一种简单的排序算法,它重复地遍历要排序的列表,依次比较相邻两个元素,如果它们的顺序错误就交换它们。重复多次,直到没有任何一对数字需要交换为止,最终得到有序列表。

冒泡排序的时间复杂度为 O(n^2),不适合处理大量数据。

public class BubbleSort {public static void bubbleSort(int[] arr) {int n = arr.length;for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - i - 1; j++) {if (arr[j] > arr[j + 1]) {// 交换arr[j]和arr[j+1]的位置int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}}public static void main(String[] args) {int[] arr = {64, 34, 25, 12, 22, 11, 90};bubbleSort(arr);System.out.print("排序后的数组:");for (int num : arr) {System.out.print(num + " ");}}
}

在上述代码中,我们定义了一个名为 BubbleSort 的类,其中包含了一个静态方法 bubbleSort 用于实现冒泡排序。在 main 方法中,我们创建了一个包含 7 个元素的整数数组,并调用 bubbleSort 方法对其进行排序。最终输出结果为 11 12 22 25 34 64 90。

请注意,冒泡排序是一种简单但效率较低的排序算法,时间复杂度为 O(n^2)。对于大规模数据可能不太适用,更高效的排序算法如快速排序、归并排序等可以考虑使用。
快速排序
快速排序是一种基于分治思想的高效排序算法,它选取一个元素作为基准值,将数组分为小于基准值和大于基准值的两个子数组,然后对这两个子数组进行递归排序,最终得到有序数组。

快速排序的时间复杂度为平均情况下的 O(nlogn),最坏情况下为 O(n^2)。

public class QuickSort {public static void quickSort(int[] arr, int low, int high) {if (low < high) {int pivotIndex = partition(arr, low, high); // 划分操作quickSort(arr, low, pivotIndex - 1); // 对左子数组进行快速排序quickSort(arr, pivotIndex + 1, high); // 对右子数组进行快速排序}}public static int partition(int[] arr, int low, int high) {int pivot = arr[high]; // 选取最后一个元素作为基准int i = low - 1;for (int j = low; j < high; j++) {if (arr[j] <= pivot) {i++;swap(arr, i, j); // 将较小的元素交换到前面}}swap(arr, i+1, high); // 将基准元素放到正确的位置return i + 1;}public static void swap(int[] arr, int i, int j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}public static void main(String[] args) {int[] arr = {64, 34, 25, 12, 22, 11, 90};int n = arr.length;quickSort(arr, 0, n - 1);System.out.print("排序后的数组:");for (int num : arr) {System.out.print(num + " ");}}
}

归并排序
归并排序也是一种基于分治思想的排序算法,它将数组划分为较小的子数组,然后对子数组进行递归排序,最终通过合并操作得到有序数组。

归并排序的时间复杂度为 O(nlogn),但需要额外的空间来存储合并过程中的数组。

public class MergeSort {public static void mergeSort(int[] arr, int low, int high) {if (low < high) {int mid = (low + high) / 2;mergeSort(arr, low, mid); // 对左半部分进行归并排序mergeSort(arr, mid + 1, high); // 对右半部分进行归并排序merge(arr, low, mid, high); // 合并两个有序数组}}public static void merge(int[] arr, int low, int mid, int high) {int n1 = mid - low + 1;int n2 = high - mid;int[] leftArr = new int[n1];int[] rightArr = new int[n2];for (int i = 0; i < n1; ++i)leftArr[i] = arr[low + i];for (int j = 0; j < n2; ++j)rightArr[j] = arr[mid + 1 + j];int i = 0, j = 0;int k = low;while (i < n1 && j < n2) {if (leftArr[i] <= rightArr[j]) {arr[k] = leftArr[i];i++;} else {arr[k] = rightArr[j];j++;}k++;}while (i < n1) {arr[k] = leftArr[i];i++;k++;}while (j < n2) {arr[k] = rightArr[j];j++;k++;}}public static void main(String[] args) {int[] arr = {64, 34, 25, 12, 22, 11, 90};int n = arr.length;mergeSort(arr, 0, n - 1);System.out.print("排序后的数组:");for (int num : arr) {System.out.print(num + " ");}}
}

总之,冒泡排序是一种简单但效率低下的算法,适合处理小型数据;快速排序和归并排序都是高效的排序算法,对于大量数据具有很好的处理效果,但在实际应用中需要根据数据规模和性质选择合适的算法。

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

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

相关文章

机器学习-基础分类算法-KNN详解

KNN-k近邻算法 k-Nearest Neighbors 思想极度简单应用数学只是少效果好可以解释机器学习算法使用过程中的很多细节问题更完整的刻画机器学习应用的流程 创建简单测试用例 import numpy as np import matplotlib.pyplot as plt raw_data_X [[3.393533211, 2.331273381],[3.1…

ubuntu20.04安装sumo

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 有问题&#xff0c;请大家指出&#xff0c;争取使方法更完善。这只是ubuntu安装sumo的一种方法。一、注意事项1、首先明确你的ubuntu的用户名是什么 二、sumo安装1.…

1.3.。

1、无名管道&#xff1a;是一个特殊的文件&#xff0c;存储于内存中&#xff0c;不在文件系统中展示&#xff0c;适合亲缘进程间的通信&#xff1b; 2、有名管道&#xff1a;与无名管道类似&#xff0c;但该特殊文件能在文件系统中查看&#xff0c;并且时候亲缘和非亲缘进程间的…

基于springboot篮球论坛系统源码和论文

首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数据库设计。本项…

国家博物馆逆向抢票协议

逆向工程的具体步骤可以因项目和目标系统的不同而有所变化。然而&#xff0c;以下是一般逆向工程的一般步骤&#xff1a; 1. 分析目标系统&#xff1a;对待逆向的系统进行调研和了解&#xff0c;包括其架构、功能、使用的技术等方面的信息。 2. 反汇编或反编译&#xff1a;使…

保姆级CDN使用教程,解决可能出现的各种问题

如果你还没有注册雨云&#xff08;rainyun&#xff09;&#xff0c;可以通过该链接进行注册雨云 - 新一代云服务提供商 通过该链接注册是可以白嫖到优惠券的&#xff0c;可以白嫖CDN。 比直接注册划算。 雨云的cdn在国内表现是非常不错的&#xff0c;而且不需要域名进行备案 在…

从编程中理解:大脑的并行处理与多任务

在编程领域,多线程并行处理是一个重要概念,它允许程序同时执行多个任务以提高效率。这一原理与大脑的并行处理和多任务能力有着异曲同工之妙。现在让我们用Unity C#代码结合金庸武侠小说中的角色来形象地展现这一点。 设想《天龙八部》中的主角段誉,在江湖中身负多种绝世武…

如何创建长期有效的文件二维码?支持多文件批量生成单独二维码

现在很多人为了避免文件通过文件有时效的问题&#xff0c;会将文件生成二维码之后来使用&#xff0c;将文件存入二维码中通过扫码调取云端的储存的数据来实现文件的预览或者下载。那么对于想要学习文件二维码制作的小伙伴&#xff0c;可以学习下面的方法来制作&#xff0c;利用…

Day25 Golang (回溯) 216.组合总和III 17.电话号码的字母组合

//02 216.组合总和III package mainimport "fmt"func combinationSum3(k int, n int) [][]int {// 全局变量path : []int{}res : [][]int{}// 回溯函数var backtracking func(targetSum, sum, k, startindex int)backtracking func(targetSum, sum, k, startindex i…

flask基于django大数据的证券股票分析系统python可视化大屏

证券分析系统采用B/S架构&#xff0c;数据库是MySQL。网站的搭建与开发采用了先进的Python进行编写&#xff0c;使用了Django框架。该系统从两个对象&#xff1a;由管理员和用户来对系统进行设计构建。主要功能包括&#xff1a;个人信息修改&#xff0c;对股票信息、股票买入、…

XML传参方式

export function groupLoginAPI(xmlData) {return http.post(/tis/group/1.0/login, xmlData, {headers: {Content-Type: application/xml,X-Requested-With: AAServer/4.0,}}) }import {groupLoginAPI} from "../api/user"; function (e) { //xml格式传参let groupX…

讲解selenium 获取href find_element_by_xpath

目录 讲解selenium获取href - find_element_by_xpath 什么是XPath&#xff1f; 使用find_element_by_xpath获取href Selenium的特点和优势 Selenium的应用场景 Selenium的核心组件 总结 讲解selenium获取href - find_element_by_xpath Selenium是一个常用的自动化测试工…

网络安全全栈培训笔记(60-服务攻防-中间件安全CVE复现WeblogicJenkinsGlassFish)

第60天 服务攻防-中间件安全&CVE复现&Weblogic&Jenkins&GlassFish 知识点: 中间件及框架列表: lIS,Apache,Nginx,Tomcat,Docker,Weblogic,JBoos,WebSphere,Jenkins, GlassFish,Jira,Struts2,Laravel,Solr,Shiro,Thinkphp,Sprng,Flask,jQuery 1、中间件-Web…

【C/C++ 10】扫雷小游戏

一、题目 写一个扫雷小游戏&#xff0c;每次输入一个坐标&#xff0c;若该处是地雷&#xff0c;则游戏失败&#xff0c;若该处不是地雷&#xff0c;则显示周围地雷数量&#xff0c;若扫除全部非地雷区域&#xff0c;则扫雷成功。 二、算法 设置两张地图&#xff08;二维数组&…

chisel decoupled

Decoupled 即为接口包装一层valid 和 ready &#xff0c;decoupled 默认方向为输出&#xff0c;如果需要输入&#xff0c;可以加.flip, Decoupled 可以直接调用Bundle或者Bits&#xff0c;Bundle 内的端口也应该用bits定义 注意: ready和valid不能组合耦合&#xff0c;否则可能…

C# SSH.NET 长命令及时返回

在SSH中执行长时间的命令&#xff0c;SSH.NET及时在文本框中返回连续显示结果。 c# - Execute long time command in SSH.NET and display the results continuously in TextBox - Stack Overflow 博主管理了一个服务器集群&#xff0c;准备上自动巡检工具&#xff0c;测试在…

Linux Rootkit实验|01 基于修改系统调用表的Hook

Linux Rootkit实验&#xff5c;01 基于修改系统调用表的Hook 文章目录 Linux Rootkit实验&#xff5c;01 基于修改系统调用表的Hook实验说明实验环境实验过程一 基于修改sys_call_table的系统调用挂钩1 寻找sys_call_table内存地址2 关掉写保护3 修改sys_call_table 二 基于系统…

AI新工具(20240203) 文心一言APP数字分身;HuggingChat Assistants等

文心一言APP数字分身-一键生成专属数字分身 文心一言数字分身是一项新功能&#xff0c;用户只需一张照片和录制三句语音&#xff0c;就能创建一个专属的数字分身。这个数字分身还支持个性化定义名称、声音、MBTI性格等&#xff0c;用户可以选择是否公开自己的数字分身。这个功…

算法总结归纳(第十一天)(部分数据结构、图论(部分))

目录 一、trie树 题目描述&#xff1a; 输入格式 输出格式 输入样例&#xff1a; 输出样例&#xff1a; ①、思路 ②、代码实现 二、并查集 1、样例 题目描述&#xff1a; 输入格式 输出格式 输入样例&#xff1a; 输出样例&#xff1a; ①、思路 ②、代码实现…

概率论中的全概率公式、贝叶斯公式解析

全概率公式 定义 全概率公式是用来计算一个事件的概率&#xff0c;这个事件可以通过几个互斥事件的并集来表示。这几个互斥事件称为“完备事件系”。实质是由原因推结果。 公式 用途 全概率公式通常用于计算一个事件的总概率&#xff0c;特别是当这个事件与几个不同的因素相关…