当前位置: 首页> 科技> 互联网 > Java数组篇[5]:数组的排序和查找

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

时间:2025/7/11 8:15:14来源:https://blog.csdn.net/weixin_66592566/article/details/140822159 浏览次数:0次

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

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

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

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

前言

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

摘要

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

概述

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

数组排序

使用Arrays.sort()

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

import java.util.Arrays;int[] numbers = {5, 3, 8, 6, 2};
Arrays.sort(numbers);

自定义排序算法

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

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 elementsint 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()方法进行高效的查找。

int index = Arrays.binarySearch(numbers, targetValue);
if (index < 0) {System.out.println("元素未找到");
} else {System.out.println("元素位置: " + index);
}

线性查找

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

int linearSearch(int[] array, int target) {for (int i = 0; i < array.length; i++) {if (array[i] == target) {return i; // 元素找到,返回索引}}return -1; // 元素未找到,返回-1
}

使用案例分享

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

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方法返回的索引,并打印出相应的查找结果。目前这部分代码尚未完成,我们可以添加如下:

if (index < 0) {System.out.println("元素 " + target + " 在数组中未找到。");
} else {System.out.println("元素 " + target + " 在数组中的位置是: " + index);
}

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

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

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

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函数的一个测试用例,演示了数组的排序和查找。

测试代码

/*** @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在数组中的位置,并打印出查找结果。输出结果将类似于:

原始数组: [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 !!!


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

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

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

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: