数组排序算法

news/2024/11/18 21:37:50/文章来源:https://www.cnblogs.com/hweiling/p/18344506

4.2 数组排序算法

4.2.1 冒泡排序

冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

public class BubbleSort {public static void main(String[] args) {int[] arr = {64, 34, 25, 12, 22, 11, 90};bubbleSort(arr);System.out.println("排序后的数组: ");for (int i : arr) {System.out.print(i + " ");}}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++) {//n-i-1 -> (n-1)-i 减掉已经排好的i个元素// 交换如果发现元素的顺序错误if (arr[j] > arr[j + 1]) {// 交换 arr[j] 和 arr[j + 1]int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}}
}

image-20240729144155852

4.2.2 选择排序

选择排序是一种简单直观的排序算法,它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

public class SelectionSort {public static void main(String[] args) {int[] arr = {64, 34, 25, 12, 22, 11, 90};selectionSort(arr);System.out.println("排序后的数组: ");for (int i : arr) {System.out.print(i + " ");}}public static void selectionSort(int[] arr) {int n = arr.length;for (int i = 0; i < n - 1; i++) {// 找到最小元素的索引int minIndex = i;for (int j = i + 1; j < n; j++) {if (arr[j] < arr[minIndex]) {minIndex = j;}}// 将找到的最小元素交换到当前位置int temp = arr[minIndex];arr[minIndex] = arr[i];arr[i] = temp;}}
}

4.2.3 快速排序

选择一个基准元素,将数组分成两部分,使得比基准小的元素在左边,比基准大的元素在右边,然后递归地排序这两部分

public static void quickSort(int[] array, int low, int high) {if (low < high) {int pi = partition(array, low, high);quickSort(array, low, pi - 1);quickSort(array, pi + 1, high);}
}public static int partition(int[] array, int low, int high) {int pivot = array[high];int i = (low - 1);for (int j = low; j < high; j++) {if (array[j] < pivot) {i++;int temp = array[i];array[i] = array[j];array[j] = temp;}}int temp = array[i + 1];array[i + 1] = array[high];array[high] = temp;return i + 1;
}

4.2.4 插入排序

通过将每个元素插入到已排序部分的适当位置,逐步构建排序序列。

public static void insertionSort(int[] array) {int n = array.length;for (int i = 1; i < n; i++) {int key = array[i];int j = i - 1;while (j >= 0 && array[j] > key) {array[j + 1] = array[j];j = j - 1;}array[j + 1] = key;}
}

4.2. 排序算法方法(sort)

public static void sort(Object[] a)

  • 对指定对象数组根据其元素的自然顺序进行升序排列。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)

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

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

相关文章

vue前端自适应布局,一步到位所有自适应

1,左右布局- 左侧固定宽带,右侧自适应剩余的宽度。 - 中间一条分割线,可以拖拉,自适应调整左右侧的宽度。 - 左侧的高度超长自动出现横向滚动条,左侧宽度超长,自动出现竖向滚动条。2,上中下布局- 最上面的 搜索条件 div 固定占用 100 px 高度,下面的 查询条件 div 固定…

IgniteFAQ-11-ignite嵌入式模式下如何使用命令行

java -cp {libs目录} sqlline.SqlLine --verbose=true -u jdbc:ignite:thin://127.0.0.1:10800 其中cp是包含ignite核心jar包和sqlline相关的包 本文来自博客园,作者:life_start,转载请注明原文链接:https://www.cnblogs.com/yangh2016/p/18348781

京东小程序数据中心架构设计与最佳实践

一、京东小程序是什么京东小程序平台能够提供开放、安全的产品,成为品牌开发者链接京东内部核心产品的桥梁,致力于服务每一个信任我们的外部开发者,为不同开发能力的品牌商家提供合适的服务和产品,让技术开放成为品牌的新机会。“Once Build, Run Anywhere”,一个小程序可…

IgniteFAQ-6-Ignite 通过zk组网时集群组网失败

zk组网类 ZookeeperDiscoverySpi zkDiscoverySpi = new ZookeeperDiscoverySpi();cfg.setDiscoverySpi(zkDiscoverySpi);配置示例: # ignite 集群租房方式,配置 zk 为,zk 集群组网方式 fc.mybatis.ignite.discovery=zk # Ignite zk 集群组网方式 ignite.discoverySpi.zkConn…

AI入门之深度学习:基本概念篇

1、什么是深度学习 1.1、机器学习图1:计算机有效工作的常用方法:程序员编写规则(程序),计算机遵循这些规则将输入数据转换为适当的答案。这一方法被称为符号主义人工智能,适合用来解决定义明确的逻辑问题,比如早期的PC小游戏:五子棋等,但是像图像分类、语音识别或自然…

前后端分离项目,后期前端身份验证的麻烦

软件构成后端 后端是一个asp.netcore webapi项目,使用jwt进行身份验证和鉴权。 前端 前端是一个基于http协议的asp.netcore RezorPage项目,但实际上完全使用的wwwwroot目录下的静态文件。没有使用RazorPage。目前只有后端接口鉴权,前端页面任意访问 身份验证需求 这两天安全…

IgniteFAQ-2-CacheWriterException: Failed to write entries in database

ignite同步或者异步落库数据到DB时,如果因为落库的数据不满足db库的要求,如长度、精度、nonull等限制,就会出现落库失败报Failed to write entries in database错误。 ignite异步落库默认时5秒或者10240条flush一次,失败的数据会不断尝试,当存在一条数据以为数据库要求失败…

Leetcode: 586. Customer Placing the Largest Number of Orders

题目要求如下:给出的例子如下:简单地说就是要找出表中订单最多客户的ID。 使用如下的代码进行实现: import pandas as pddef largest_orders(orders: pd.DataFrame) -> pd.DataFrame:return orders.groupby("customer_number").count().reset_index().nlargest(1,…

攻防世界CTF web方向

入门题鉴赏 disabled_button https://adworld.xctf.org.cn/challenges/list 解决思路:因为说的是前端的button坏掉了,于是我们用查看器查看他的页面源代码,发现有个disabled,就是不能的意思将 disabled 删掉即可! 总结:前端JS代码查看修改weak_auth https://adworld.xctf…

前端使用 Konva 实现可视化设计器(20)- 性能优化、UI 美化

这一章主要分享一下使用 Konva 遇到的性能优化问题,并且介绍一下 UI 美化的思路,主要使用 Naive UI。这一章主要分享一下使用 Konva 遇到的性能优化问题,并且介绍一下 UI 美化的思路。至少有 2 位小伙伴积极反馈,发现本示例有明显的性能问题,一是内存溢出问题,二是卡顿的…

【日记】感觉自己越来越摆了(546 字)

正文今天想了很多乱七八糟的事情,但最后都没有什么结论。这种情况一般称为:内耗。擦药的地方有些好点了,又有一些新的地方冒了出来。参加工作一年多了,现在却才开始越发受不了这种生活。好想要什么时候参加一次正规的半程马拉松比赛。只要完赛就好了。两次旅行的行程依然没…

二叉树的递归套路

对于二叉树的经典递归套路的理解二叉树的递归套路 二叉树结构 二叉树是一个将数据组织成头尾相连的特殊链表,每一个数据单元与链表一样有一个指向其的指针,但与链表不同的是其可以有两个指向其他单元的指针,分别是其左孩子与右孩子。采用该这种结构,最终数据的呈现形式会与…