我最近才开始学习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[] elementaros
。 int maxSize
显示可管理的Car
对象的最大数量。我想做的是-我想按字母顺序对elementaros
数组中的元素进行排序。如果有人有时间向我展示如何使用示例代码或仅给我一些提示,我将非常感激。正如我所说-我没有人可以问。
答案 0 :(得分:0)
选择排序是搜索和排序的组合。
原理很简单,但是我总是喜欢用图表而不是大量的解释。
在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:
我对您的初始问题的阅读速度过快,导致我回答了完全不同的排序算法。我不好。
我在这里找到了一个能解决问题的实现:
希望这会有所帮助。