首页 >Java >java教程 >Java 中的搜索与排序:主要区别和应用

Java 中的搜索与排序:主要区别和应用

Susan Sarandon
Susan Sarandon原创
2025-01-16 12:28:01872浏览

本文对比了 Java 的搜索和排序算法,重点介绍了它们独特的函数、方法和时间复杂度。 它提供了实际的示例和实现,例如用于数据组织的归并排序和用于高效检索的二分搜索,展示了它们解决现实世界问题的能力。

在 Java 中,牢牢掌握搜索和排序算法及其关键差异对于应用程序功能和有效的数据管理至关重要。 搜索精确定位数据集中的特定数据,而排序则重新排列数据本身。本文通过示例来探讨它们在目的、方法和应用方面的差异。

Java 的搜索和排序算法之间的核心区别在于它们的目标、输出、效率和时间复杂度。 对比分析请参考表1。

表1 Java 中的搜索与排序 Searching vs. Sorting in Java: Key Differences and Applications

算法的选择通常取决于期望的结果、应用程序需求(数据集大小、预排序数据等)和具体要求。

表 2 说明了几种搜索和排序算法的伪代码示例和时间复杂度:

表 2 运行时复杂性和伪代码示例 Searching vs. Sorting in Java: Key Differences and Applications 注意:没有Java的Comparable接口,代码仅适用于原始数据类型。 (来源:Lysecky, R. 和 Lizarraga, A. (2022)。使用 ZyLabs 进行 Java 编程,18.3 O 表示法,图 18.3.2。)

合并排序是一种分而治之的算法,它递归地将数据数组分割成更小的子数组,对它们进行排序,然后合并排序后的子数组(GeeksforGeeks,2020a)。 相反,二分搜索适用于预先排序的数组,反复将搜索间隔减半,直到找到目标元素或认为目标元素不存在(GeeksforGeeks,2020b)。

以下示例演示使用合并排序按出版年份对 ArrayListBook 个对象进行排序,然后在排序列表上进行二分搜索:

Book.java

<code class="language-java">/**
 * Book object with title and publication year. Implements Comparable for year-based sorting.
 * 
 * @author Alexander Ricciardi
 * @version 1.0
 * @date 07/14/2024
 */
class Book implements Comparable<Book> {
    String title;
    int year;

    /**
     * Book constructor.
     * @param title Book title.
     * @param year Publication year.
     */
    public Book(String title, int year) {
        this.title = title;
        this.year = year;
    }

    /**
     * Compares books by publication year.
     * @param other Book to compare.
     * @return Comparison result.
     */
    @Override
    public int compareTo(Book other) {
        return Integer.compare(this.year, other.year);
    }

    /**
     * Returns book's string representation.
     * @return String representation.
     */
    @Override
    public String toString() {
        return title + " (" + year + ")";
    }
}</code>

BookSortingSearching.java

<code class="language-java">import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

/**
 * Sorts and searches a list of books using merge sort and binary search.
 * 
 * @author Alexander Ricciardi
 * @version 1.0
 * @date 07/14/2024
 */
public class BookSortingSearching {

    // ... (mergeSort and binarySearch methods remain the same) ...

    public static void main(String[] args) {
        // ... (main method remains largely the same) ...
    }
}</code>

...(mergeSort 和 binarySearch 方法将包含在此处,因为它们在原始输入中。为了简洁起见,我省略了它们,因为它们很长并且已经存在。)

输出(示例):

... (Original and sorted lists are displayed here) ...
<p>Enter a year to search for: 1951
Book found: The Catcher in the Rye (1951)</p>

归并排序的O(n log(n))复杂性使其对于大型数据集非常高效,而二分搜索的目标方法非常适合机器学习等应用(例如,查找最佳超参数)。

总之,搜索和排序算法虽然不同,但却是相互依赖的。 排序(如合并排序)为高效搜索(如二分搜索)准备数据,这使得两者对于跨不同领域的多样化问题解决都是不可或缺的。


参考文献:

极客们的极客们。 (2020a,11 月 18 日)。 合并排序。极客们的极客们。 https://www.php.cn/link/d0e7b521c18b09876cb7693e42880dba

极客们的极客们。 (2020b,2 月 3 日)。 二分搜索。极客们的极客们。 https://www.php.cn/link/d29af1fd577b037033dd1149e816d521

Lysecky, R. 和 Lizarraga, A. (2022)。 使用 ZyLabs 使用 Java 编程。 Zyante, Inc.


最初由 Level UP Coding 于 2024 年 11 月 22 日在 Medium 上的 Alex.omegapy 发表。

以上是Java 中的搜索与排序:主要区别和应用的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn