前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java数组篇[5]:数组的排序和查找

Java数组篇[5]:数组的排序和查找

原创
作者头像
喵手
发布2024-09-11 12:59:55
1160
发布2024-09-11 12:59:55
举报
文章被收录于专栏:Java进阶实战

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

**小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!**

前言

在处理数组数据时,排序和查找是两个非常基本且重要的操作。排序可以帮助我们组织数据,而查找可以让我们快速定位到特定的数据项。

摘要

本文将介绍Java中数组排序和查找的方法,包括使用Java标准库中的Arrays类以及自定义排序和查找算法。

概述

排序算法有多种,如冒泡排序、选择排序、插入排序等,而查找则通常使用线性查找或二分查找。Java的Arrays类提供了一些方便的方法来对数组进行排序和二分查找。

数组排序

使用Arrays.sort()

Java的Arrays类提供了一个静态方法sort(),可以对数组进行排序。

代码语言:java
复制
import java.util.Arrays;



int[] numbers = {5, 3, 8, 6, 2};

Arrays.sort(numbers);

自定义排序算法

你也可以实现自己的排序算法,例如冒泡排序。

代码语言:java
复制
void bubbleSort(int[] array) {

    boolean swapped;

    for (int i = 0; i < array.length - 1; i++) {

        swapped = false;

        for (int j = 0; j < array.length - 1 - i; j++) {

            if (array[j] > array[j + 1]) {

                // Swap elements

                int temp = array[j];

                array[j] = array[j + 1];

                array[j + 1] = temp;

                swapped = true;

            }

        }

        if (!swapped) break; // No need to continue if the array is already sorted

    }

}

数组查找

使用Arrays.binarySearch()

如果数组已经排序,可以使用Arrays.binarySearch()方法进行高效的查找。

代码语言:java
复制
int index = Arrays.binarySearch(numbers, targetValue);

if (index < 0) {

    System.out.println("元素未找到");

} else {

    System.out.println("元素位置: " + index);

}

线性查找

对于未排序的数组,可以使用线性查找来定位元素。

代码语言:java
复制
int linearSearch(int[] array, int target) {

    for (int i = 0; i < array.length; i++) {

        if (array[i] == target) {

            return i; // 元素找到,返回索引

        }

    }

    return -1; // 元素未找到,返回-1

}

使用案例分享

假设我们需要对用户输入的一系列数字进行排序,并查找特定的数字。

代码语言:java
复制
Scanner scanner = new Scanner(System.in);

int[] userInputs = new int[5];

for (int i = 0; i < userInputs.length; i++) {

    userInputs[i] = scanner.nextInt();

}

Arrays.sort(userInputs); // 对输入的数字进行排序



int target = scanner.nextInt(); // 用户希望查找的数字

int index = Arrays.binarySearch(userInputs, target);

// 打印查找结果...

  针对如上示例代码,这里我给大家详细的代码剖析下,以便于帮助大家理解的更为透彻,帮助大家早日掌握。

这段Java代码演示了如何从用户那里接收一系列整数输入,将这些输入存储在数组中,对数组进行排序,然后使用二分查找算法查找用户指定的目标值。下面是对代码的逐行解释以及如何完善它以打印查找结果:

  1. Scanner scanner = new Scanner(System.in);:创建一个Scanner对象,用于从标准输入(通常是键盘)读取数据。
  2. int[] userInputs = new int[5];:声明并初始化一个长度为5的整型数组userInputs,用于存储用户的输入。
  3. 接下来的for循环使用scanner.nextInt()方法读取用户输入的5个整数,并将它们存储在userInputs数组中。
  4. Arrays.sort(userInputs);:使用Arrays类的sort方法对userInputs数组进行排序。
  5. int target = scanner.nextInt();:读取用户希望查找的目标整数。
  6. int index = Arrays.binarySearch(userInputs, target);:使用Arrays类的binarySearch方法在已排序的userInputs数组中查找目标整数的索引。
  7. 接下来的代码应该检查binarySearch方法返回的索引,并打印出相应的查找结果。目前这部分代码尚未完成,我们可以添加如下:
代码语言:java
复制
if (index < 0) {

    System.out.println("元素 " + target + " 在数组中未找到。");

} else {

    System.out.println("元素 " + target + " 在数组中的位置是: " + index);

}

这样,程序就可以根据binarySearch方法返回的索引值来告知用户目标值是否存在于数组中,如果存在,还能告诉用户其在数组中的位置。

请注意,Arrays.binarySearch方法假设数组是预先排序的。如果数组未排序,使用binarySearch可能会得到错误的结果。此外,如果数组中有重复的元素,binarySearch返回的索引可能是数组中任意一个匹配元素的位置。

完整的代码示例,包括用户输入和查找结果的打印,如下:

代码语言:java
复制
import java.util.Scanner;

import java.util.Arrays;



public class ArraySortAndSearchExample {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入5个整数,输入完毕后请按回车键:");

        int[] userInputs = new int[5];

        for (int i = 0; i < userInputs.length; i++) {

            userInputs[i] = scanner.nextInt();

        }

        scanner.nextLine(); // 消耗掉行尾的换行符



        Arrays.sort(userInputs); // 对输入的数字进行排序

        System.out.println("排序后的数组: " + Arrays.toString(userInputs));



        System.out.print("请输入您希望查找的数字:");

        int target = scanner.nextInt();

        int index = Arrays.binarySearch(userInputs, target);



        if (index < 0) {

            System.out.println("元素 " + target + " 在数组中未找到。");

        } else {

            System.out.println("元素 " + target + " 在数组中的位置是: " + index);

        }



        scanner.close();

    }

}

这段代码还添加了用户提示信息,提高了程序的友好性和可用性。

应用场景案例

在处理大量的数据时,排序和查找是常见的需求,例如在数据库索引、搜索引擎或数据分析中。

优缺点分析

**使用Arrays.sort()Arrays.binarySearch()的优点**:

  • 简单易用。
  • 经过优化,性能较好。

**缺点**:

  • Arrays.sort()可能不适用于所有类型的数据,需要自定义比较器。
  • Arrays.binarySearch()要求数组是预先排序的。

**自定义排序和查找算法的优点**:

  • 更灵活,可以根据特定需求定制。

**缺点**:

  • 实现复杂度较高。
  • 性能可能不如标准库方法。

核心类方法介绍

Arrays.sort():对数组进行排序。

Arrays.binarySearch():在已排序的数组中进行二分查找。

测试用例

以下是使用main函数的一个测试用例,演示了数组的排序和查找。

测试代码

代码语言:java
复制
/\*\*

 \* @Author ms

 \* @Date 2024-07-31 11:26

 \*/

public class Test5 {

    public static void main(String[] args) {

        int[] numbers = {3, 1, 4, 1, 5};



        // 排序数组

        System.out.println("原始数组: " + Arrays.toString(numbers));

        Arrays.sort(numbers);

        System.out.println("排序后的数组: " + Arrays.toString(numbers));



        // 查找元素

        int target = 4;

        int index = Arrays.binarySearch(numbers, target);

        if (index < 0) {

            System.out.println("元素 " + target + " 未找到");

        } else {

            System.out.println("元素 " + target + " 的位置: " + index);

        }

    }

}

测试代码执行结果

  根据如上测试用例,我本地演示结果展示如下,仅供参考哈,你们也可以自行修改测试用例或者添加更多的测试数据或测试方法,进行熟练学习以此加深理解。

代码分析

  针对如上示例代码,这里我给大家详细的代码剖析下,以便于帮助大家理解的更为透彻,帮助大家早日掌握。

这段Java代码是一个完整的程序,它演示了如何使用Java标准库中的Arrays类对数组进行排序和查找操作。下面是对代码的逐行解释:

  1. package com.secf.service.action.hpy.hys.ListDir;:定义了程序的包名,通常反映了公司或组织的层级结构。
  2. import java.util.Arrays;:导入了Java的Arrays类,它提供了一系列操作数组的静态方法。
  3. 以多行注释形式提供了作者信息和日期。
  4. public class Test5:定义了一个名为Test5的公共类。
  5. public static void main(String[] args):这是程序的入口点,main方法,它接受一个字符串数组args作为参数。
  6. int[] numbers = {3, 1, 4, 1, 5};:声明并初始化了一个整型数组numbers

7-9. 打印原始数组,并使用Arrays.sort()方法对数组进行排序,然后打印排序后的数组。

10-15. 定义了要查找的目标值target,使用Arrays.binarySearch()方法在排序后的数组中查找该元素。根据返回的索引值判断元素是否存在于数组中,并打印相应的消息。

当这段代码执行时,它将首先打印出原始数组,然后是排序后的数组,接着会尝试查找数字4在数组中的位置,并打印出查找结果。输出结果将类似于:

代码语言:java
复制
原始数组: [3, 1, 4, 1, 5]

排序后的数组: [1, 1, 3, 4, 5]

元素 4 的位置: 3

请注意,数组索引从0开始,所以如果元素4在数组中的位置是3,这意味着它是数组中的第四个元素。

这段代码展示了Java中数组排序和查找的基本操作,这些操作在处理数据集合时非常有用。Arrays.sort()方法对数组进行原地排序,而Arrays.binarySearch()方法则利用已排序数组的特点,通过二分查找算法高效地定位元素。如果数组未排序或元素不存在于数组中,binarySearch将返回一个负数,表示元素应该插入的位置以维持排序。在本例中,由于数组已经排序,binarySearch能够直接返回元素4的正确索引。

小结

本文介绍了Java中数组排序和查找的基本方法。使用Java标准库中的Arrays类可以方便地进行这些操作,同时也可以根据需要实现自定义的算法。

总结

数组的排序和查找是数据处理中的基础操作。Java提供了强大的工具来简化这些任务,使得开发者可以更专注于解决问题本身而不是实现细节。无论是使用内置方法还是自定义算法,选择合适的方法对于提高程序的效率和可读性至关重要。

... ...

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

... ...

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!

***

⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 摘要
  • 概述
  • 数组排序
    • 使用Arrays.sort()
      • 自定义排序算法
      • 数组查找
        • 使用Arrays.binarySearch()
          • 线性查找
          • 使用案例分享
          • 应用场景案例
          • 优缺点分析
          • 核心类方法介绍
          • 测试用例
            • 测试代码
              • 测试代码执行结果
                • 代码分析
                • 小结
                • 总结
                • 文末
                相关产品与服务
                腾讯云代码分析
                腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档