排序算法Java实现(优化上一篇内容)

Java map集合实现上一条(篇),下一条(篇)新闻翻篇功能     传统实现新闻消息的上一条和下一条功能均使用list集合即可,【即:将数据id保存在list集合中,点击上一条时将id减1,点击下一条时id加1】,此时实现传统的上一条与下一条功能是没有问题的。    但是对于一些特殊的显示功能就无法实现。例如:在数据库中存储了365天每天发生的事情(多件事)如图1(字段分别为id,year,month,day,title),在页面上显示对应于今天发生的事情... 阅读详情

    上一篇文章我学习了使用Java实现了最简单的插入排序算法(InsertionSort)。今天接续跟着马士兵老师学习,他讲到了这个程序还有两个待优化的地方。

    1.看下面代码:

static void sort(int[] array){
		for(int i = 1;i<array.length;i++){ 
			//数组的第一个元素被当作已经排好序的一个数,所以i从1开始。
			for(int j = i;j>0;j--){
				if(array[j]<array[j-1]){
					swap(array,j,j-1);
				}
			}
		}
	}

        上面的代码中,内层的for循环里面有一个条件:if(array[j]<array[j-1])。这个条件可以放到for循环判断条件里面。代码是变成下面的样子:

static void sort(int[] array){
		for(int i = 1;i<array.length;i++){ 
			//数组的第一个元素被当作已经排好序的一个数,所以i从1开始。
			for(int j = i; j>0&&a[j]<a[j-1]; j--){
					swap(array,j,j-1);
			}
		}
	}

        以我的水平,我只能感觉代码少了一行,还不太明白这样的具体好处是什么。哈哈,问题先留着,以后再解决。

2.修改算法,使用临时变量记录标记项,去掉swap()方法。

        这是之前的代码段:

static void sort(int[] array){
		for(int i = 1;i<array.length;i++){ 
			//数组的第一个元素被当作已经排好序的一个数,所以i从1开始。
			for(int j = i;j>0;j--){
				if(array[j]<array[j-1]){
					swap(array,j,j-1);
				}
			}
		}
	}

static void swap(int[] array,int i,int j){
		int temp = array[i];
		array[i] = array[j];
		array[j] = temp;
		                 
	}

        之前的算法不停的调用swap()方法使数组元素归位,调用函数会带来一些开销的:

        调用函数的开销大致可分两个部分:①传递参数的开销②保存当前程序上下文信息所花费的开销。对于传递参数的开销而 言,传递的参数越多开销就越大;对于保存当前程序上下文所花费的开销而言,函数越复杂需要花费的开销就越大。

    sort函数调用swap()方法,参数是一个数组,程序还要保存上下文。为了减少开销提高效率,可使用临时变量记录标记项,去掉swap()方法。

     使用临时变量temp,思路如下图所示:当需要把 2 插入到它前面的序列时,用temp保存2,之前的元素不断向后移动(a[j]=a[j-1]),这样一来就给2腾开了它该在的位置,然后将temp赋值给那个位置。

     修改后的代码(修改后性能提升,我给它取名叫:sortPlus()  哈哈哈):

static void sortPlus(int[] a){
		int temp = 0;
		int j;
		for(int i=1;i<a.length;i++){
			for(j = i;j > 0;j--){
				if(a[j]<a[j-1]){
					temp = a[j];
					a[j] = a[j-1];
					a[j-1] = temp;
				}
				
			}
		}
	}

    这样就不用总调用swap()了。


    代码修改完毕,我们通过数据看一下sort() 和 sortPlus()。自己写了一下测试代码:

    我让两个程序都执行十万次,看看他们的执行时间

static void testSort(int [] a){
		long startTime = System.currentTimeMillis();    //获取开始时间

		for(int i = 0; i<100000;i++){
			sort(a);
		}

		long endTime = System.currentTimeMillis();    //获取结束时间

		System.out.println("十万次sort()运行时间:" + (endTime - startTime) + "ms");    //输出程序运行时间
		
		long startTime1 = System.currentTimeMillis();    //获取开始时间

		for(int i = 0; i<10000;i++){
			sort(a);
		}

		long endTime1 = System.currentTimeMillis();    //获取结束时间

		System.out.println("十万次sortPlus()运行时间:" + (endTime1 - startTime1) + "ms");    //输出程序运行时间
	}

    在main() 方法中调用:

public class InsertionSort {
	public static void main(String[] args) {
		int [] a = {6,5,2,4,9,7,8,5,1,4};
		print(a);
		//sort(a);
		//sortPlus(a);
		//print(a);
		testSort(a);

	}

    执行结果:

    可以看到在程序执行十万次的情况下,SortPlus()是Sort()运行时间的1/5 !

    把十万再增大一下变成一百万看看:

    一百万次下SortPlus()的运行时间大约是Sort()运行时间的1/10。


    上面测试我只考虑了运行次数,应该还要测试在大量待排序数据数据下的运行效率。

 

Java实现的九种排序算法详解 排序算法是编程中不可或缺的一部分,它们对于数据处理和分析至关重要。无论是简单的场景还是复杂的数据结构,排序算法都能帮助我们将数据从无序状态转为有序状态,从而便于检索和分析。本章将简单介绍排序算法的核心概念,并为接下来的章节,即各种排序算法的Java实现细节打下基础。从简单的冒泡排序到高效的快速排序,再到稳定的归并排序,每一种排序算法都有其独特之处。通过逐步了解和学习这些排序算法,我们将对算法的时间复杂度、空间复杂度以及实际应用中如何选择合适的排序算法有更深入的理解。 阅读详情

相关推荐

Java排序算法实现与应用案例解析

本文还有配套的精品资源,点击获取 简介:在Java中,排序是处理数据的基础操作,可利用内置方法如Arrays类的sort()或自定义排序算法完成。本案例提供各种排序算法实现,包括冒泡、选择、插入、快速和归并排序等,以及它们的使用场景。此外,还介绍了Java内置排序方法的高效实现,以及如何根据数据规模选择合适的排序算法。通过分析不同排序算法的时间和空间复杂度,加深了对Java...

weixin_35706255的博客 1177

java实现上一篇下一篇功能

根据文章类型查询,实现上一篇、下一篇的效果 自定义实体Dto(只有扩展字段) @Getter @Setter public class OsArticleDto extends BaseDto { /** */ private static final long serialVersionUID = 1L; /* * 上一篇文章id */ private String beforeId; /** * 上一篇文章标题 */ private String beforeTitl.

Forever_Devil的博客 2409

网站设计上一篇 下一篇效果插件

网站设计上一篇 下一篇效果插件可以使设计的网页产生上一篇 下一篇效果

Java实现上一篇下一篇内容整理

1、设置接收上一篇下一篇的实体对象 /**  * 上一篇 下一篇的实体接收  * @author sl  * @since 2018-01-05  */ public class PreAndNextEntity { /** * 上一篇或者下一篇的id */ private String id; /** * 上一篇或者下一篇的标题 */ private String t

花海残阳 9776

JSP新闻上一篇下一篇及分页显示

JSP新闻上一篇下一篇及分页显示-MVC模型 1.新闻分页显示(SQL查询语句分页) 2.查看新闻时下面显示上一篇和下一篇新闻标题. 3.如果没有上一篇或下一篇则显示:没有了

ubuntu虚拟机搭建OP-TEE

在网上找了一些搭建OP-TEE的过程,模仿着进行搭建,结果有好多报错,为了方便自己以后重新搭建,所以将整个过程记录下来。

weixin_44213847的博客 1001

用Java 实现文章内容上一篇下一篇功能

ITDragon博客 用Java 实现文章内容上一篇下一篇功能,逻辑和分页不一样。效果和本页面底部一样。采用的是Spring data jpa SQL语句实现该功能 SQL 语句查询的是该数据的上一条和下一条Spring data jpa 若是要执行原生的sql语句,需要添加nativeQuery=true DAO 层代码如下 copy@Query(value="SEL

qq_36235922的博客 7017

ZYNQ平台上基于PHY芯片的IEEE1588/PTP高效实现方案

本文详细解析了在Xilinx ZYNQ平台上,如何通过选用支持IEEE1588/PTP的专用PHY芯片(如RTL8211FS-VS-CG、DP83640)来实现高精度时间同步的高效方案。文章对比了PS端与PL端MAC连接的优劣,提供了从硬件选型、接口设计、Linux驱动适配到PTP协议栈配置与性能优化的完整实战指南,并总结了关键避坑经验,为工业网络、电力系统等需要纳秒级同步的应用提供了清晰、可靠的实施路径。

kkk56的博客 1091

JAVA如何处理上一篇下一篇,Java中如何实现分页功能

Java中如何实现分页功能时间:2017-10-10来源:华清远见Java培训中心内容多了,我们就会想要去做分页,既能提升用户体验,又减少页面体积,提升加载速度。那么Java中怎么实现分页功能呢?今天华清Java学院小编就和大家分享一下Java中如何实现分页功能。Java实现分页功能的具体思路:这里先说下Java实现分页的具体思路,主要就是利用了jquery.pagination这个插件...

weixin_39673037的博客 5765

【蒸汽幻想台服新版商业端】2025最新整理单机一键即玩镜像端+WIN系半手工端+PC客户端+网页注册+网页管理后台+教程【站长亲测】

MMORPG端游【蒸汽幻想台服新版商业端】2025最新整理单机一键即玩镜像端+WIN系半手工端+PC客户端+网页注册+网页管理后台+教程。

百创科技 531

大模型之Spring AI实战系列(一):基础认知篇 - 开启智能应用开发之旅

Spring AI 是一个轻量级开源框架,旨在简化 AI 模型在企业级 Java 应用中的集成与管理。它提供了跨多个 AI 服务提供商的便携式 API,支持聊天、文本转图像、嵌入式模型等多种功能,并兼容主流的 AI 模型提供商如 OpenAI、Google 等。Spring AI 的核心功能包括结构化输出、向量数据库支持、工具/函数调用、可观察性、文档摄取 ETL 框架、AI 模型评估等。

寻道AI,探索AI无限可能! 6364

Java实现十大排序算法

上篇博文我们用C++实现了十大排序算法 今天我们来用Java实现一下经典的十大排序算法 具体代码与文件可访问我的GitHub地址获取 https://github.com/liuzuoping/Algorithms PS:欢迎star 1 冒泡排序 冒泡排序无疑是最为出名的排序算法之一,从序列的一端开始往另一端冒泡(你可以从左往右冒泡,也可以从右往左冒泡,看心情),依次比较相邻的两个数的大小(到...

liuzuoping的博客 9064

深度学习在移动开发中的应用:实时姿态估计实战

我们将使用TensorFlow Lite框架,结合专为移动端优化的MoveNet模型,实现一个能够在主流Android设备上达到30FPS的多人姿态跟踪解决方案,并深入探讨其优化技巧和实际应用场景。特别是3D姿态估计、多人长期跟踪等前沿技术的发展,将进一步推动移动端姿态估计技术的应用深度和广度。在下一篇文章中,我们将探讨深度学习在移动端的另一个创新应用:实时手势识别,包括如何在资源受限的环境中实现复杂手势的实时识别,以及这项技术在AR/VR交互、智能家居控制等场景中的应用。第四部分:典型应用场景实现。

Programming Talk 325

Java实现计数排序算法详解及优化

计数排序(Counting Sort)是一种线性时间复杂度的排序算法,特别适用于数据范围有限的情况。它通过统计每个元素出现的次数,然后按照次数排序,从而实现排序。本文将详细讲解如何使用Java实现计数排序算法,并结合图解和实例代码,帮助您全面理解这一高级排序算法。同时,我们还将探讨计数排序的优化方法,以进一步提高其性能。计数排序通过统计每个元素出现的次数,然后利用这些计数值将元素放置在正确的位置,从而实现排序。为了更清晰地展示计数排序的过程,以下使用一个简单示例并分步骤图解:初始数组: 4, 2, 2, 8

捕风捉你 · 星桥API接入与大模型实战 1027

# 【WorkBuddy专栏33】工作空间,最大的WorkBuddy技巧——任务隔离、记忆分区与多项目管理实战

工作空间,最大的WorkBuddy技巧——任务隔离、记忆分区与多项目管理实战

AI人人懂 2133

RAG的“诊断艺术”:从测试集结果倒追根源,精准优化检索、排序与生成

当RAG应用给出一个糟糕的答案时,开发者的第一反应可能是:“我的Prompt写得不够好?”这种基于“感觉”的猜测往往是低效的。通过构建一个包含黄金上下文信息的测试集,我们可以像一位经验丰富的医生一样,对RAG系统的各个“器官”进行独立的“健康检查”。一个用于RAG诊断的测试集,除了问题和答案,还需要包含中间环节的“黄金标准”。如果你的RAG流程包含Re-ranker,那么在评估完初期的召回后,需要单独评估Re-ranker的效果。RAG的优化是一个持续的过程,应该形成一个闭环。的文档块尽可能多地召回。

kakaZhui的博客 153

图解选择排序算法及优化

3分钟学会选择排序算法及其优化

chenchenchencl的博客 7020

微信小程序 - 获取用户头像昵称等信息(带授权检测)

前言 接口调整官方文档:https://developers.weixin.qq.com/community/develop/doc/0000a26e1aca6012e896a517556c01 在以前,是否授权可以直接弹出询问用户,但现在微信更改了策略,必须由用户点击按钮触发。下面将用代码来实现用户授权及获取用户信息。 功能介绍 无论确认授权还是拒绝授权,都会跳转对应页面,不让用户卡在界面。 点击授权后,下次不在出现授权页面了,如果拒绝,下次依然出现。 以下代码可直接复制粘贴,具体功能如下:

🏆 前端领域优质创作者 1万+

常见排序算法及其优化(Java实现)

所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。 一....

桀客 780

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

用 Java 实现的八种常用排序算法

八种排序算法可以按照如图分类 交换排序 所谓交换,就是序列中任意两个元素进行比较,根据比较结果来交换各自在序列中的位置,以此达到排序的目的。 1. 冒泡排序 冒泡排序是一种简单的交换排序算法,以升序排序为例,其核心思想是: 从第一个元素开始,比较相邻的两个元素。如果第一个比第二个大,则进行交换。 轮到下一组相邻元素,执行同样的比较操作,再找下一组,直到没有相邻元素可比较为止,此时最后的元素应是最大的数。 除了每次排序得到的最后一个元素,对剩余元素重复以上步骤,直到没有任何一对元素需要比较为止。 ..

低吟不作语的博客 1万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

排序算法Java实现

算法最好最坏平均空间稳定思想注意事项冒泡O(n)O(n2n^2n2O(n2n^2n2O(1)Y比较最好情况需要额外判断选择O(n2n^2n2O(n2n^2n2O(n2n^2n2O(1)N比较交换次数一般少于冒泡堆O(nlognnlognnlognO(nlognnlognnlognO(nlognnlognnlognO(1)N选择堆排序的辅助性较强,理解前先理解堆的数据结构插入。

m0_74267125的博客 1301

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java常用的八种排序算法与代码实现

在Java的时候,对于排序的应用需要熟练的掌握,这样才能够确保Java学习时候能够有扎实的基础能力。那Java有哪些排序算法呢?本文小千就来详细说说Java经典的8种排序算法。

xiaoxijinger的博客 5200

常见排序算法及JAVA实现

排序算法的分类 先看维基百科中的一张关于排序算法的表 我们主要了解常见的一些排序算法。像Bogo排序,臭皮匠排序这类完全不实用的排序可以置之不理。 我们这里要说的排序算法都是内排序,也就是只在内存中进行,涉及到对磁盘等外部存储设备中的数据进行排序称之为外排序,关于外排序的内容可以查看维基百科。其实外排序使用的是归并排序的思想。 简单选择排序(SelectSort) 选...

优快云文章已停止维护,后续文章会在 https://blog.hufeifei.cn 持续更新 5591

一篇搞懂 Java 常用排序算法:从原理到实现

本文详细介绍了8种常用排序算法及其Java实现,包括插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序和计数排序。每种算法从核心思想、实现代码到性能分析(时间复杂度、空间复杂度、稳定性)进行全方位解析,并针对特定算法提供优化版本(如快速排序的递归和非递归实现)。文章还特别介绍了排序算法的基础概念(稳定性、时空复杂度等),帮助读者全面理解排序算法的特性和适用场景。所有代码均封装完整,可直接运行测试,适合需要系统学习排序算法的开发者和算法爱好者。

2402_86887479的博客 1835

十大排序算法全面解析(Java实现)及优化策略

排序算法是算法思维的核心载体,从基础的 O (n²) 算法到线性时间的非比较排序,每种算法都体现了不同的问题解决思路。实际应用中,需结合数据规模、分布特征、稳定性要求等因素选择合适方案。动手实现:编写所有算法代码,调试边界情况(如逆序、重复元素、空数组)。性能分析:使用测量不同算法耗时,观察数据规模对性能的影响。源码研读:分析 Java/Go 等语言的内置排序实现(如 OpenJDK 的 TimSort 源码),学习工业级优化技巧。

2202_75601845的博客 1524
上一篇: 插入排序 Java实现
下一篇: XX大学学生选课系统需求规格说明书
bingoCoder
博客等级 码龄10年 1400粉丝 157原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值