Java存储桶排序另一个数组中的元素

时间:2018-11-29 01:53:16

标签: java sorting bucket

我最近才开始学习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; 
}

代码的想法

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

1 个答案:

答案 0 :(得分:0)

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

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

enter image description here

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:

我对您的初始问题的阅读速度过快,导致我回答了完全不同的排序算法。我不好。

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

希望这会有所帮助。