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

2024-09-11 12:59:55 浏览数 (1)

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区: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 !!!

***

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

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

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

0 人点赞