gpt4 book ai didi

Java - 以 'right' 方式实现排序算法

转载 作者:行者123 更新时间:2023-12-04 06:49:52 27 4
gpt4 key购买 nike

我目前正在尝试在 Java 中实现各种排序算法,主要是为了好玩,但我正在努力解决如何“正确”地做到这一点。也就是说,我希望用户能够在任何可比较的东西上调用选择的排序算法 - int s, long s, String s, boolean s(实际上,这些在Java中是否具有可比性?),它们自己的类;任何。问题是如何做到这一点。
我正在考虑使用一个类来表示排序算法,因此使用通用列表或其他任何内容( List<E> )存储要排序的内容。这也将允许我使用多个构造函数,从而允许用户以各种形式传递数据 - 列表、数组等等。这是正确的方法吗?我目前的问题是我不希望用户在想要对某些内容进行排序时必须创建一个类,我希望它能够像 System.out.println 一样被调用。或类似。

// Example:

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

// This is what I do *not* want.
InsertionSort mySort = new InsertionSort();
int[] sortedInts = mySort.sort(myInts);

// This is more like what I want.
int[] sortedInts = Sorting.insertionSort(myInts);
对于看似基本的问题,我深表歉意,但我只是在学习编程语言。对于在软件公司工作的二年级计算机专业学生来说,这有点可笑,但你会惊讶于我的大部分工作只需要很少的编程知识......通常需要更多的设计知识。
编辑:
为了清楚起见,我的三个主要问题是:
  • 让用户创建一个类来进行排序,还是在用户导入的类中拥有一个静态方法更好?
  • 是否可以轻松处理原始数据类型和通用对象?由于我希望能够处理实现可比较(或类似)的任何通用对象,因此这会导致原语出现问题(因为它们没有实现任何东西 ;) )。
  • 处理通用输入的最佳方法是什么 - 在尝试对它们进行排序之前我应该​​检查什么(例如,实现 Comparable)?
  • 最佳答案

    你可以以 Collections 的方式为例提供 binarySearch 操作......事实上,

    int[] sortedInts = Sorting.insertionSort(myInts);

    更像java方式,即使我个人更喜欢
    public class Sorting {
    public static <DataType extends Comparable> Iterable<DataType> insertionSort(Iterable<DataType> data);
    }
  • <DataType>确保输出数据与输入数据类型相同
  • Iterable<DataType>数据输入数据是可迭代的,以确保最大的兼容性。显然,使用 List 非常简单,因为它允许内部项目重新排序。但是,使用可迭代对象确保此方法的实现者必须重新创建列表才能对其进行修改,从而保证输入列表保持不变,而输出列表是另一个列表。

  • 由于我刚刚看到您编辑您的问题,让我逐条回复(并考虑在此之后选择答案,因为添加新问题比无休止地编辑现有问题更容易 - 除非您将您的问题设为社区维基,就像我对这个回复所做的一样)

    Is it better to have the user create a class to do the sorting, or to have a static method in a class the user imports?



    在我看来,在这种情况下使用静态方法更可取,因为您在这里必须以一种非常“基本”的方式操作不是您创建的对象。

    Is it possible to deal with both primitive data types and generic objects easily? Since I want to be able to handle any generic object that implements Comparable (or likewise), this then causes problems with primitives (as they don't implement anything ;) ).



    您听说过 autoboxing ?这是 Java 5 的一个特性,它使对象的主要类型“等效”。也就是说 int 会自动转换为 Integer,如您所知,它实现了 Comparable。

    What is the best way to handle generic input - what should I check for before I try to sort them (implementing Comparable, for example)?



    请注意,由于我的方法声明 (the ),检查输入数据是否实现 Comparable 不是由您完成的,而是由 Jav 编译器完成的,从而允许您的 IDE 向您显示错误。

    关于Java - 以 'right' 方式实现排序算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3288438/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com