Java排序算法练习 (2024.7.23)

        sorts工具类(里面是自己写的几个常用的排序算法)

package SortExercise20240723;
import java.util.Scanner;
public class Sorts {public static int[] creatArray() {Scanner sc = new Scanner(System.in);System.out.println("请输入你想要多大的数组");int size = sc.nextInt();int[] array = new int[size];for (int i = 0; i < array.length; i++) {System.out.printf("请输入第%d个元素", i + 1);array[i] = sc.nextInt();}return array;}public static void printArray(int[] array) {for (int i : array) {System.out.printf("%d ", i);}}// 冒泡排序public static void bubbleSort(int[] array) {Scanner sc = new Scanner(System.in);System.out.println("请选择升序还是降序");System.out.println("1.升序     2.降序");int choice = sc.nextInt();switch (choice) {case 1 -> {for (int i = 0; i < array.length - 1; i++) {for (int j = 0; j < array.length - i - 1; j++) {if (array[j + 1] < array[j]) {int temp = array[j];array[j] = array[j + 1];array[j + 1] = temp;}}}}case 2 -> {for (int i = 0; i < array.length - 1; i++) {for (int j = 0; j < array.length - i - 1; j++) {if (array[j + 1] > array[j]) {int temp = array[j];array[j] = array[j + 1];array[j + 1] = temp;}}}}default -> {System.out.println("选择错误,请重新选择");}}}// 冒泡排序为什么内层循环需要从0索引开始:因为外层循环每一次会将一个最大或者最小的元素“冒泡”到元素的末尾,相当于是后面有序,前面无序// 所以说冒泡排序需要从0索引开始,而且内层循环中j < array.length - i - 1中,之所以要-i,是因为每次外循环(也就是i控制)都会将一个// 元素在末尾排序,经过i次外循环,数组末尾已经有i个元素是有序的了,所以说内循环可以-i,从而提高效率// 选择排序public static void chooseSort(int[] array) {Scanner sc = new Scanner(System.in);System.out.println("请选择升序还是降序");System.out.println("1.升序     2.降序");int choice = sc.nextInt();switch (choice) {case 1 -> {for (int i = 0; i < array.length; i++) {int min = i;for (int j = i + 1; j < array.length; j++) {if (array[j] < array[min]) {min = j;}}if (min != i) {int temp = array[min];array[min] = array[i];array[i] = temp;}}}case 2 -> {for (int i = 0; i < array.length; i++) {int max = i;for (int j = i + 1; j < array.length; j++) {if (array[j] > array[max]) {max = j;}}if (max != i) {int temp = array[max];array[max] = array[i];array[i] = temp;}}}default -> System.out.println("选择错误,请重新选择");}}/* 选择排序的核心是选择,根据升序和降序的不同要求,每次选择一个最小值或者最大值放在数组的前面(相当于排序过程中,i的前面是有序的)注意,min和max记录的应该是索引,而并非对应的元素值,否则在比较和交换的时候,会出错,并且会导致选择排序的逻辑混乱 */// 插入排序public static void insertSort(int[] array) {Scanner sc = new Scanner(System.in);System.out.println("请选择升序还是降序");System.out.println("1.升序     2.降序");int choice = sc.nextInt();switch (choice) {case 1 -> {for (int i = 1; i < array.length; i++) {if (array[i] < array[i - 1]) {int temp = array[i];int j;for (j = i - 1; j >= 0 && array[j] > temp; j--) {array[j + 1] = array[j];}array[j + 1] = temp; // 将temp赋值给array[j + 1]是因为j会多自减一次}}}case 2 -> {for (int i = 1; i < array.length; i++) {if (array[i] > array[i - 1]) {int temp = array[i];int j;for (j = i - 1; j >= 0 && array[j] < temp; j--) {array[j + 1] = array[j];}array[j + 1] = temp; // 将temp赋值给array[j + 1]是因为j会多自减一次}}}default -> System.out.println("选择错误,请重新选择");}}// 快速排序// 升序public static int partitionUp(int[] array, int low, int high) {int temp = array[low]; // 假定每次在数组最左边的元素为基准元素while (low < high) {while (low < high && array[high] >= temp) { // 找到第一个比基准元素小的元素high--;}array[low] = array[high]; // 将比基准元素小的移动到low那边去while (low < high && array[low] <= temp) { // 找到第一个比基准元素大的元素low++;}array[high] = array[low]; // 将比基准元素大的移动到high那边去}array[low] = temp; // while循环结束,此时low和high在同一位置,基准元素归位return low; // 返回基准元素的位置}// 降序public static int partitionDown(int[] array, int low, int high) {int temp = array[low]; // 假定每次在数组最左边的元素为基准元素while (low < high) {while (low < high && array[high] <= temp) { // 找到第一个比基准元素大的元素high--;}array[low] = array[high]; // 将比基准元素大的移动到low那边去while (low < high && array[low] >= temp) { // 找到第一个比基准元素小的元素low++;}array[high] = array[low]; // 将比基准元素小的移动到high那边去}array[low] = temp; // while循环结束,此时low和high在同一位置,基准元素归位return low; // 返回基准元素的位置}public static void quickSortUp(int[] array, int low, int high) {if (low < high) {int position = partitionUp(array, low, high);quickSortUp(array, low, position - 1); // 递归处理基准元素左边的元素quickSortUp(array, position + 1, high); // 递归处理基准元素右边的元素}}public static void quickSortDown(int[] array, int low, int high) {if (low < high) {int position = partitionDown(array, low, high);quickSortDown(array, low, position - 1); // 递归处理基准元素左边的元素quickSortDown(array, position + 1, high); // 递归处理基准元素右边的元素}}public static void choiceQuickSort(int[] array, int low, int high) {Scanner sc = new Scanner(System.in);System.out.println("请选择升序还是降序");System.out.println("1.升序     2.降序");int choice = sc.nextInt();switch (choice) {case 1 -> {quickSortUp(array, low, high);}case 2 -> {quickSortDown(array, low, high);}default -> System.out.println("选择错误,请重新选择");}}
}

        冒泡排序类

package SortExercise20240723;
public class BubbleSort {public static void main(String[] args) {int[] array = Sorts.creatArray();Sorts.bubbleSort(array);Sorts.printArray(array);}
}

        选择排序类

 

package SortExercise20240723;
public class ChooseSort {public static void main(String[] args) {int[] array = Sorts.creatArray();Sorts.chooseSort(array);Sorts.printArray(array);}
}

        插入排序类

package SortExercise20240723;
public class InsertSort {public static void main(String[] args) {int[] array = Sorts.creatArray();Sorts.insertSort(array);Sorts.printArray(array);}
}

        快速排序类

package SortExercise20240723;
public class QuickSort {public static void main(String[] args) {int[] array = Sorts.creatArray();int low = 0;int high = array.length - 1;Sorts.choiceQuickSort(array, low, high);Sorts.printArray(array);}
}

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

企业公户验证API如何使用JAVA、Python、PHP语言进行应用

在纷繁复杂的金融与商业领域&#xff0c;确保每笔交易的安全与合规是至关重要的。而企业公户验证API&#xff0c;正是这样一位默默守护的数字卫士&#xff0c;它通过智能化的手段&#xff0c;简化了企业对公账户验证流程&#xff0c;让繁琐的审核变得快捷且可靠。 什么是企业公…

圣杯依然闪耀 --基于短时RSI的均值回归策略跑出30%年化

圣杯依然闪耀 RSI 永远是我最爱的指标 – 因为潮汐和回归是这个蓝色星球的生命年轮&#xff0c;这样的轮回也存在于交易世界。而 RSI 就是刻画市场中的潮汐和回归的最好指标之一。 年初我介绍过 Connor’s RSI。这次我们将探索 Connors 提出的一个基于短时 RSI 的均值回归策略…

F1冠军版洗地机开售,云鲸能否成为“冠军”?

云鲸&#xff0c;本是一种由风云气象约束为鲸形状而成的大气生物&#xff0c;其遨游苍穹&#xff0c;不染尘埃。而当云鲸“降入尘世”&#xff0c;也代表着一种极简且洁净的品质生活方式。 作为一家专业的清洁机器人企业&#xff0c;以此为名的云鲸将科技清洁与美学设计融为一…

MySQL客户端命令一节将.sql文件导入MySQL

MySql客户端命令 直接输入SQL语句 使用MySQL客户端连接到服务器之后&#xff0c;可以发送SQL语句到服务器执行&#xff0c;并且以&#xff1b;和\g, \G作为结束不同的结束方式显示内容有所不同** TIPS: ;和\g结尾以表格的形式显示结果\G以行的形式显示结果 在连接到服务器之后…

【React】详解受控表单绑定

文章目录 一、受控组件的基本概念1. 什么是受控组件&#xff1f;2. 受控组件的优势3. 基本示例导入和初始化定义函数组件处理输入变化处理表单提交渲染表单导出组件 二、受控组件的进阶用法1. 多个输入框的处理使用多个状态变量使用一个对象管理状态 2. 处理选择框&#xff08;…

拉提查合创5步玩转git工具协作代码开发

1 工具使用场景 开发团队使用git版本管理工具&#xff0c;进行协作代码开发过程中&#xff0c;最常用的场景为&#xff1a; &#xff08;1&#xff09;拉取代码 将git远端仓库最新代码拉取到本地。 &#xff08;2&#xff09;提交代码 将本地新增修改的代码提交至git远端仓库中…

Django项目中报错:django.template.exceptions.TemplateDoesNotExist: index.html

访问127.0.0.1&#xff1a;8000访问出错 查看报错原因 到Django项目当中找到settings.py&#xff0c;找到TEMPLATES中的DIRS: 添加如下代码&#xff0c;并导入OS模块&#xff1a; "DIRS": [os.path.join(BASE_DIR,templates)] 再次访问IP地址&#xff1a;

Shell编程之正则表达式与文本三剑客

目录 一、正则表达式 1.引言--什么是正则表达式 1.1正则表达式的功能 2.基础正则表达式&#xff08;BRE&#xff09; 2.1特殊字符 2.2定位符 2.3非打印字符 3.扩展正则表达式(ERE) 4.元字符操作的案列 二、命令小工具 1.cut&#xff1a;列截取工具 2.sort排序 …

Footprint Analytics 助力 Core 区块链实现数据效率突破

Core 是一个基于比特币并兼容 EVM 的 Layer 1 区块链&#xff0c;正通过其创新解决方案引革新特币金融。作为首个引入非托管 BTC 质押协议及全球首个发行收益型 BTC ETP 产品的区块链&#xff0c;Core 站在了区块链技术的最前沿。通过利用超过 50% 的比特币挖矿哈希算力&#x…

SQL Server 设置端口号:详细步骤与注意事项

目录 一、了解SQL Server端口号的基础知识 1.1 默认端口号 1.2 静态端口与动态端口 二、使用SQL Server配置管理器设置端口号 2.1 打开SQL Server配置管理器 2.2 定位到SQL Server网络配置 2.3 修改TCP/IP属性 2.4 重启SQL Server服务 三、注意事项 3.1 防火墙设置 3…

《GPT-4o mini:开启开发与创新的新纪元》

在科技发展的快速进程中&#xff0c;OpenAI 推出的 GPT-4o mini 模型如同一阵春风&#xff0c;给开发者们带来了新的希望和机遇。它以其卓越的性能和极具吸引力的价格&#xff0c;成为了行业内热议的焦点。 当我首次听闻 GPT-4o mini 的消息时&#xff0c;内心充满了好奇与期待…

【Gin】Gin框架性能优化:精进应用效率与稳定性的对象池策略(上)

【Gin】Gin框架性能优化&#xff1a;精进应用效率与稳定性的对象池策略(上) 大家好 我是寸铁&#x1f44a; 【Gin】Gin框架性能优化&#xff1a;精进应用效率与稳定性的对象池策略(上)✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 本次文章分为上下两部分&#xff0c;上部…

C++初学(2)

2.1、其他简单C语句例子 下面这个程序要求运行时输入值 #include <iostream> int main() {using namespace std;int yuanshi;cout << "How many yuanshi do you have?" << endl;cin >> yuanshi;cout << "Here are two more.&q…

过某开源滑动验证码

过某开源滑动验证码 今天早上我有一点空闲时间&#xff0c;想着回顾一下前几天在某查询网站遇到的滑动验证码&#xff0c;以免时间久了忘记了。那个网站可能使用的是较早版本的开源滑块验证码系统tianai-captcha&#xff0c;但我不确定是否正确。 整体思路&#xff1a; 获取…

开始尝试从0写一个项目--前端(三)

器材管理板块 添加器材管理导航 src\views\home\Home.vue src\router\index.js src\views\equipment\Equipment.vue <template><div>hello!</div></template> 测试 搜索导航分页查询 src\views\equipment\Equipment.vue <template><div&…

【React】详解 Redux 状态管理

文章目录 一、Redux 的基本概念1. 什么是 Redux&#xff1f;2. Redux 的三大原则 二、Redux 的核心组件1. Store2. Action3. Reducer 三、Redux 的使用流程1. 安装 Redux 及其 React 绑定2. 创建 Action3. 创建 Reducer4. 创建 Store5. 在 React 应用中使用 Store6. 连接 React…

Apache Flink窗口详解

Apache Flink窗口详解 Apache Flink 的核心功能之一是窗口处理&#xff0c;它允许开发人员以基于时间或基于计数的方式分组和处理数据流。 窗口技术是一种根据某些标准将数据流划分为有限块&#xff08;称为窗口&#xff09;的技术。 窗口&#xff08;Window&#xff09;是处…

活动报名小程序

#活动报名工具# # 活动报名小程序 ## 项目简介 一款通用的活动报名工具&#xff0c;包含活动展示&#xff0c;微信支付&#xff0c;订单管理&#xff0c;分享评价等功能。 品客聚精彩&#xff0c;有你才精彩&#xff01;不只有线下活动还可以进行线上裂变活动。 …

HTTP ESP8266 获取天气请求 单片机,嵌入式 2024/7/26 日志

通过http请求获取天气信息: 这里借鉴一下 中国气象局网站举例 首先根据网址 分析: http://weather.cma.cn/ 通过vscode插件:REST Client 发送请求我们会得到内容 首先我们的打开浏览器调试工具查看请求格式 筛选以下几个关键的格式,试着用插件发送请求 GET /web/weather…