首页 > 解决方案 > 另一个数组中元素的 Java 桶排序

问题描述

我最近才开始学习 java,今天我学会了如何进行所谓的选择排序。在过去的 3 个小时里,我一直在尝试进行桶排序,但有些部分我不知道如何编码。重要提示:我正在通过一本书完全自学java。我不是学生,我这样做是一种爱好。我已经用谷歌搜索了我能想到的所有内容,但没有找到解决方案。我没有老师或任何我可以问的人,所以是的,任何帮助将不胜感激!

代码:

private int[] bucketSort() {
    int[]bucket=new int[maxSize+1];
    int[]sortedElements = new int[elementaros.length];
    for(int i=0; i<elementaros.length;i++) {
        bucket[elementaros[i]]++; //it says that I can't convert from Car to int. How can I add the elements of array elemenators to bucket?
    }
    int outPos = 0;
    for (int j = 0; j < bucket.length; j++){
        for (int k = 0; k < bucket[i]; k++){
            sortedElements[outPos++] = i;
        }
    }
    return bucket; 
}

代码的想法

我有一个类型的数组元素CarCar是我程序的另一类)。它看起来像这样 - Car[] elementaros。显示可管理对象int maxSize的最大数量。Car我想要做的是以下 - 我想elementaros按字母顺序对数组中的元素进行排序。如果有人有时间向我展示这将如何使用示例代码运行,或者只是给我一些提示,我将非常感激。正如我所说 - 我没有人可以问。

标签: javasortingbucket

解决方案


选择排序是搜索和排序的组合。

原理很简单,但我总是更喜欢图表而不是巨大的解释。

在此处输入图像描述

unsorted在数组的开头开始一个指针。然后,对于数组的每个值,在您的数组中搜索最小值(或搜索按字母顺序排列的汽车)并Car用指针切换创建的位置(这也是一个Car

然后您可以将指针前进到数组的下一个元素。

这是执行此操作的基本实现

public static Car[] doSelectionSort(Car[] elementaros) {

    for (int i = 0; i < elementaros.length - 1; i++) {
        int index = i;
        for (int j = i + 1; j < elementaros.length; j++) {
            if (elementaros[j].getName().compareTo(elementaros[index].getName()) < 0) {
                index = j;
            }
        }

        Car nextOrderedCar = elementaros[index];
        elementaros[index] = elementaros[i];
        elementaros[i] = nextOrderedCar;

    }

    return elementaros;

}

举例来说,我想您的类型对象Car有一个我们可以用于比较的名称。

更新 1:

我读得太快了你最初的问题,这让我回答了一个完全不同的排序算法。我的错。

我在这里找到了一个可以解决问题的实现:

希望这可以帮助。


推荐阅读