滚雪球学Java(29):数组长度和排序算法:让你的程序更高效

2023-09-21 12:22:47

🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!


前言

在上一篇文章中,我们学习了数组的常用技巧和方法。本篇文章将深入探讨数组长度以及如何使用排序算法提高程序效率。

摘要

  1. 数组长度是数组中元素的个数,可以使用 length 属性获取。
  2. 排序算法可用于将数组按升序或降序排列。
  3. 常用的排序算法有冒泡排序、选择排序和快速排序。
  4. 排序算法的效率取决于数据规模和算法实现。

Java数组

数组长度

数组长度是数组中元素的个数。在 Java 中,可以使用 length 属性获取数组的长度。

int[] arr = {1, 2, 3, 4, 5};
int length = arr.length; // 5

需要注意的是,数组长度是一个固定的值,一旦确定就不能更改。如果想添加或删除元素,需要创建一个新的数组。

排序算法

排序算法是对一组数据按照升序或降序排列的算法。在 Java 中,常用的排序算法有冒泡排序、选择排序和快速排序。

冒泡排序

冒泡排序是一种简单的排序算法。它的基本思想是将相邻的元素比较,如果前一个比后一个大,则交换它们的位置,直到完成整个数组的排序。

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]) {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

选择排序

选择排序是一种简单的排序算法。它的基本思想是从数组中选择最小的元素,然后将其与数组的第一个元素交换,接着在剩下的元素中选择最小的元素,然后将其与数组的第二个元素交换,以此类推,直到完成整个数组的排序。

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;
            }
        }
        if (minIndex != i) {
            int temp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = temp;
        }
    }
}

快速排序

快速排序是一种常用的排序算法。它的基本思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,然后分别对这两部分记录继续进行快速排序,以达到整个序列有序的目的。

public static void quickSort(int[] arr, int left, int right) {
    if (left < right) {
        int partitionIndex = partition(arr, left, right);
        quickSort(arr, left, partitionIndex - 1);
        quickSort(arr, partitionIndex + 1, right);
    }
}

public static int partition(int[] arr, int left, int right) {
    int pivot = arr[left];
    int i = left + 1;
    int j = right;
    while (i <= j) {
        while (i <= j && arr[i] <= pivot) {
            i++;
        }
        while (i <= j && arr[j] > pivot) {
            j--;
        }
        if (i < j) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
    int temp = arr[left];
    arr[left] = arr[j];
    arr[j] = temp;
    return j;
}

测试用例

下面是测试排序算法的代码:

int[] arr = {5, 3, 6, 2, 7, 1, 9, 8, 4};
System.out.println("排序前:" + Arrays.toString(arr));
bubbleSort(arr);
System.out.println("冒泡排序后:" + Arrays.toString(arr));
selectionSort(arr);
System.out.println("选择排序后:" + Arrays.toString(arr));
quickSort(arr, 0, arr.length - 1);
System.out.println("快速排序后:" + Arrays.toString(arr));

全文小结

本篇文章介绍了数组长度和排序算法的基本概念。数组长度是数组中元素的个数,可用 length 属性获取。排序算法可用于将数组按升序或降序排列,常用的排序算法有冒泡排序、选择排序和快速排序。排序算法的效率取决于数据规模和算法实现。

附录源码

  如上涉及所有源码均已上传同步在Gitee,提供给同学们一对一参考学习,辅助你更迅速的掌握。

总结

本篇文章重点介绍了数组长度和排序算法,这些都是编程中常用的基本技能。了解数组长度可以更好地处理数组操作,而排序算法则可以提高程序效率。在实际编程中,需要根据具体情况选择合适的算法,以达到更好的效果。

☀️建议/推荐你


  无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学Java」,bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门Java编程,就像滚雪球一样,越滚越大,指数级提升。

📣关于我


我是bug菌,CSDN | 掘金 | infoQ | 51CTO 等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,华为云 | 阿里云| 腾讯云等社区优质创作者,全网粉丝合计15w+ ;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等海量资料。

更多推荐

Digger PRO - Voxel enhanced terrains

资源链接在文末DiggerPRO​​​是一个简单但强大的工具,可以直接从Unity编辑器或游戏中创建天然洞穴和悬岩。会让你感觉自己手中握有一个体素地形,且毫无瑕疵。它实际上保持着最新、最快且可靠的Unity地形系统,并在你需要的地方无缝创建洞穴/悬岩峭壁网格。Digger内部使用体素和MarchingCubes来创建网

(二)kafka从入门到精通之kafka的优势

学习传送门(一)kafka从入门到精通之初识kafka一、常用消息队列比较基于发布与订阅的消息系统那么多,为什么Kafka会是一个更好的选择呢?咱们先来简单的看看mq的一个对比图吧。特性ActiveMQRabbitMQRocketMQKafka生产者消费者模式支持支持支持支持发布订阅模式支持支持支持支持请求回应模式支持

基于卷积神经网络的手写字体识别(详细笔记)

主要参考博客:1、基于卷积神经网络的手写数字识别(附数据集+完整代码+操作说明)2、用PyTorch实现MNIST手写数字识别(最新,非常详细)基于卷积神经网络的手写字体识别——目录1前言1.1实现效果1.2学习背景1.3关于MNIST手写数据集2残差网络2.1深度学习中的退化问题2.2残差网络结构2.3残差块的网络模

【网络】计算机网络基础

Linux网络对网络的理解在网络传输中存在的问题:找到我们所需要传输的主机解决远距离数据传输丢失的问题怎么进行数据转发,路径选择的问题有问题,就有解决方案;我们把相同性质的问题放在一起,做出解决方案解决方案设计成为层状结构,层内部高内聚,层于层之间低耦合。层状结构有利于减少后期维护成本,只需要对某一层的错误进行处理在L

VRP基础及操作

通用路由平台ARP是华为公司数据通信产品的通用操作系统平台实现统一用户界面和管理界面实现控制平面功能实现网络接口层相关技术说明:交换技术:vlan,trunk,stp,vtp,三层交换,以太网通道路由技术:静态路由,默认路由,hsrp,rip,ospf,单臂路由,nat安全技术:ACL,防火墙,vpn各种技术的作用:v

Go 工具链详解(五):竞态条件检测神器 Race Detector

并发编程可以提高程序的性能和稳定性,但也带来了一些挑战,如竞态条件。竞态条件是指并发程序中的多个线程同时访问共享资源,导致程序行为不确定的问题。为了避免竞态条件的产生,需要使用同步机制(如互斥锁、条件变量等)来协调线程之间的访问。然而,在复杂的程序中,竞态条件可能难以察觉,因此Golang提供了竞态条件检测工具Race

Vue.js路由及Node.js的坏境配置--超详细

一,Vue路由1.1路由是什么路由是用来管理应用程序中不同页面之间导航的概念。VueRouter是Vue.js官方提供的路由管理器,它允许我们通过定义路由规则和视图组件来配置路由1.2路由给我们带来的好处有哪些?单页应用(SinglePageApplication):路由使得我们能够在单个页面中展示多个视图,而不必每次

超详细-Vivado配置Sublime+Sublime实现VHDL语法实时检查

目录一、前言二、准备工作三、Vivado配置Sublime3.1Vivado配置Sublime3.2环境变量添加3.3环境变量验证3.4Vivado设置3.5配置验证3.6解决Vivado配置失败问题四、Sublime配置4.1Sublime安装PackageControl4.2Sublime安装VHDL插件4.3语法

STM32单片机中国象棋TFT触摸屏小游戏

实践制作DIY-GC0167-中国象棋一、功能说明:基于STM32单片机设计-中国象棋二、功能介绍:硬件组成:STM32F103RCT6最小系统+2.8寸TFT电阻触摸屏+24C02存储器+1个按键(悔棋)游戏规则:1.有悔棋键,点击后悔棋一步。2.有绿色提示线,提示当前该哪一方走棋了。3.不按照游戏规则走棋时,比如让

LabVIEW开发气动悬浮系统教学平台

LabVIEW开发气动悬浮系统教学平台目前,通过使用可编程逻辑控制器,几乎可以实现任何工业生产过程的自动化。工业自动化可以提高流程效率,提高生产水平并减少损失。在此背景下,介绍了工业自动化教育系统的设计和实现以及气动悬浮过程中的控制应用。该自动化系统基于PLCS7-1500和LabVIEW中设计的人机界面,用于监测气动

游戏开发之路

最近即将大四,面临实习和就业的问题,学校只想尽快把我们推出去,却不管前方是刀山还是火海。如果没有梦想,去哪里都是流浪。如果怀有梦想,你是否迷茫?我不是985也不是211,我不想使用Unity或Unreal,明明什么都没有我却想做出惊艳的3A作品。但现在实现不了梦想没关系,十年后也许可以实现梦想,二十年后也许可以实现梦想

热文推荐