尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Java学习——排序算法
若看到这篇文章的小伙伴发现内容有错误请告诉我改正。一、简单排序算法1、冒泡排序详细解释和java代码实现见以下文章https://blog.csdn.net/zxmda/article/details/146965243?spm1011.2415.3001.10575sharefrommp_manage_linkhttps://blog.csdn.net/zxmda/article/details/146965243?spm1011.2415.3001.10575sharefrommp_manage_link2、选择排序详细解释和java代码实现见以下文章https://blog.csdn.net/zxmda/article/details/146965243?spm1011.2415.3001.10575sharefrommp_manage_linkhttps://blog.csdn.net/zxmda/article/details/146965243?spm1011.2415.3001.10575sharefrommp_manage_link3、插入排序1算法思想①将数组分为已排序部分和未排序部分。②初始时已排序部分只有一个元素数组的第一个元素未排序部分包含其余所有元素。③从未排序部分取出一个元素通常是第一个元素在已排序部分找到合适的位置插入。④重复上述过程直到未排序部分为空整个数组变为有序。2图示表示3java代码实现--for循环import java.util.Arrays; public class InsertionSort{ public static void main(String[] args){ int[] arr {4,6,8,9,2,0,1,3,7,5}; insertionSort(arr); //采用Arrays类重写的toString方法进行数组表示 System.out.println(Arrays.toString(arr)); //采用for each进行数组表示 for(int x : arr) System.out.print(x ); } public static int[] insertionSort(int[] a){ int temp; //每次排序未排序好的第一个元素的索引 for(int i 1; i a.length; i){ //未排好序列的第一个元素的索引从后往前依次比较 for(int j i ; j 0; j--){ //若发现元素大于前一个元素互换 if(a[j] a[j -1]){ temp a[j]; a[j] a[j - 1]; a[j - 1] temp; }else{//如果没有退出本轮排序 break; } } } return a; } }结果java代码实现--Comparable接口import java.util.Arrays; public class InsertionSort{ public static void main(String[] args){ Integer[] arr {4,6,8,9,2,0,1,3,7,5}; sort(arr); System.out.println(Arrays.toString(arr)); for(Integer x : arr) System.out.print(x ); } //对数组排序 public static void sort(Comparable[] a){ for(int i 1; i a.length; i){ for(int j i; j 0; j--){ if(greater(a[j - 1],a[j])){ exch(a, j, j - 1); }else{ break; } } } } //判断a是否大于b private static boolean greater(Comparable a, Comparable b){ return a.compareTo(b) 0; } //交换数组a索引为i和j的元素 private static void exch(Comparable[] a, int i ,int j){ Comparable temp a[i]; a[i] a[j]; a[j] temp; } }结果二、高级排序算法1、希尔排序1算法思想①分组排序将数组按照一定的间隔h分成若干子序列每个子序列内部进行插入排序。②逐步减小间隔随着排序的进行逐渐减小子序列的间隔直到间隔为1。③最终排序当间隔减小到1时整个数组基本有序再进行一次普通的插入排序。间隔h的初始化及递减的规则int h 1; //h的初始化 while(h a.length / 2){ h h *2 1; } //h的递减规则 h h / 2;2图示表示3java代码实现--Comparable接口import java.util.Arrays; public class ShellSort{ public static void main(String[] args){ Integer[] arr {4,6,8,9,2,0,1,3,7,5}; sort(arr); System.out.println(Arrays.toString(arr)); } public static void sort(Comparable[] a){ //间隔h的初始化 int h 1; while(h a.length / 2){ h h * 2 1; } //当间隔h 1时进行排序 while(h 0){ //每一轮排序中的第一个要插入的元素 for(int i h; i a.length ; i){ //和前面的最后一个元素进行比较 for(int j i; j h; j j - h){ if(greater(a[j - h], a[j])){ exch(a, j - h, j); }else{ break; } } } h h / 2; } } private static boolean greater(Comparable a, Comparable b){ return a.compareTo(b) 0; } private static void exch(Comparable[] a, int i ,int j){ Comparable temp a[i]; a[i] a[j]; a[j] temp; } }结果2、归并排序1递归函数自己调用自己为递归。2算法思想①分解将数组分成两半直到每个子数组只有一个元素。②排序递归地对每个子数组进行归并排序。③合并将排序后的子数组合并成一个有序的数组。3图示表示4java代码实现--Comparable接口import java.util.Arrays; public class MergeSort{ private static Comparable[] arr; public static void main(String[] args){ Integer[] a {4,6,8,9,2,0,1,3,7,5}; sort(a); System.out.println(Arrays.toString(a)); } private static void sort(Comparable[] a){ arr new Comparable[a.length];//初始化一个和a大小相同的数组 int lo 0; int hi a.length - 1; sort(a,lo,hi); } //对数组a从lo到hi的元素进行排序 private static void sort(Comparable[] a, int lo ,int hi){ if(hi lo) return; int mid (lo hi) / 2; //左数组排序 sort(a, lo, mid); //右数组排序 sort(a, mid 1, hi); //归并 merge(a, lo, mid, hi); } //比较a是否小于b private static boolean less(Comparable a, Comparable b){ return a.compareTo(b) 0; } //交换数组a的索引为i和j的元素 private static void exch(Comparable[] a, int i ,int j){ Comparable temp a[i]; a[i] a[j]; a[j] temp; } // public static void merge(Comparable[] a, int lo, int mid, int hi){ int i lo; int p1 lo; int p2 mid 1; while(p1 mid p2 hi){ if(less(a[p1],a[p2])){ arr[i] a[p1]; }else{ arr[i] a[p2]; } } while (p1 mid) { arr[i] a[p1]; } while (p2 hi) { arr[i] a[p2]; } for (int k lo; k hi; k) { a[k] arr[k]; } } }结果3、快速排序
RELATED

相关推荐

从零给 GTA 5 增强版菜单加功能:YimMenuV2 注入菜单框架实战指南

从零给 GTA 5 增强版菜单加功能:YimMenuV2 注入菜单框架实战指南

从零给 GTA 5 增强版菜单加功能:YimMenuV2 注入菜单框架实战指南 【免费下载链接】YimMenuV2 Experimental menu for GTA 5: Enhanced 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMenuV2 给 GTA 5 写菜单,最折磨人的从来不是功能本身&…

📅 2026/10/23 11:03:19
基于SpringBoot的志愿服务积分管理系统

基于SpringBoot的志愿服务积分管理系统

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

📅 2026/10/23 11:03:19
Dev C++安装教程:Windows下C语言编译器配置与调试

Dev C++安装教程:Windows下C语言编译器配置与调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/23 10:58:18
MORE NEWS

更多资讯

📰

LLMs for Legal Subsumption in German Employment Contracts

文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)评估德国雇佣合同条款的合法性,旨在解决法律工作中文本密集、资源消耗大的问题。研究通过与法律专家合作扩展现有数据集,测试了不同LLMs在三种法律上下文(无法律上下文、完整法律文本及判例、提炼的审查指南)下将条款…

📰

Java房屋租赁管理系统源码:Spring Boot+MySQL实现房源合同账单

简介:这份房屋租赁管理系统面向学习Java Web与传统SSH框架的在校学生和初中级开发者,提供一套可直接参考的租房业务实现,涵盖房源信息、用户管理与租赁记录等常见模块,适合课程设计、毕业设计或框架入门练习。压缩包共104个文件&a…

📰

北斗B1I基带信号MATLAB仿真:从信号生成到捕获跟踪的完整工程实践

简介:这份资源是面向卫星导航、通信工程及信号处理方向学习者与科研人员的北斗基带信号MATLAB仿真代码包,聚焦解决北斗B1I频点C/A码生成、采样与基带信号合成的建模问题,适合具备一定MATLAB基础、希望动手复现北斗信号链路的中高级读者。压缩…

📰

Winform HTTP POST JSON 接口联调与响应回显实践

简介:面向 .NET 桌面开发者的 Winform HTTP POST JSON 通信示例工程,适合需要让客户端向服务端提交结构化数据并读取返回结果的初学者与中级开发者参考。工程围绕 HttpClient 发起异步 POST 请求、使用 Json.NET 完成对象序列化与返回内容反序列化、设置…

📰

GitLab跳版本升级后通用设置保存报500:迁移与缓存排查实战

GitLab 跨大版本升级后,点开后台“通用设置”随便改一个字段再点保存,结果直接甩一个 500 页面出来,这种事在运维圈真不算少见。尤其你这边的路径是 12.3.9 直接跳到 14.4.5,中间隔了 12、13、14 三个大版本线,风险点不…

📰

nRF52840 USB Dongle:OpenThread与FIDO2双协议栈实战指南

简介:这是一套面向物联网嵌入式开发者与开源硬件爱好者的nRF52840微型开发平台资源,聚焦低功耗多协议无线通信实践,特别适用于蓝牙5、Thread、IEEE 802.15.4及FIDO2安全认证等IoT场景快速原型验证。资源以ZIP格式封装,共含多个固件…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬