gpt4 book ai didi

java - 冒泡排序不对单个元素进行排序

转载 作者:太空宇宙 更新时间:2023-11-04 13:02:36 25 4
gpt4 key购买 nike

我有两个方法,它们必须是 void 方法,它们使用列表中名为 Magnitude 的元素的一种属性,使用冒泡排序从最小到最大对它们进行排序,方法 OnePassBubbleSort 一次对一个元素进行排序sortByMagnitudeWithBubbleSort 运行排序所需的时间以获得答案,问题是震级为 2.6 的地震似乎没有正确排序。

我的代码是 this :

public void onePassBubbleSort(ArrayList<QuakeEntry> quakes, int numSorted) {
int minIdx = 0;
for (int i=0 + 1; i< quakes.size()-numSorted; i++) {

if (quakes.get(i).getMagnitude() < quakes.get(minIdx).getMagnitude()) {
QuakeEntry qi = quakes.get(i);
QuakeEntry qmin = quakes.get(minIdx);
quakes.set(i,qmin);
quakes.set(minIdx,qi);
minIdx = i;
}

}

System.out.println("Printing Quakes after pass " + numSorted );
for(QuakeEntry qe: quakes){
System.out.println(qe.toString());
}

}

public void sortByMagnitudeWithBubbleSort(ArrayList<QuakeEntry> in) {

for (int i=0; i< in.size()-1; i++) {
onePassBubbleSort(in,i);
}
}

原始数据为

  • (-23.27,-67.66),星等 = 4.80,深度 = -175320.00,标题 = 智利圣佩德罗德阿塔卡马东南 69 公里
  • (35.68,-118.10),星等 = 1.50,深度 = -8280.00,标题 = 加利福尼亚州因约肯以西 27 公里
  • (36.22,-117.89),星等 = 2.60,深度 = -1450.00,标题 = 加利福尼亚州奥兰查 ESE 12 公里
  • (36.95,-121.57),星等 = 1.00,深度 = -8660.00,标题 = 加利福尼亚州吉尔罗伊以南 6 公里
  • (38.82,-122.77),星等 = 1.40,深度 = -1300.00,标题 = 加利福尼亚州科布以西 3 公里

我的结果输出是

  1. (36.95,-121.57),星等 = 1.00,深度 = -8660.00,标题 = 加利福尼亚州吉尔罗伊以南 6 公里
  2. (36.22,-117.89),星等 = 2.60,深度 = -1450.00,标题 = 加利福尼亚州奥兰查 ESE 12 公里
  3. (38.82,-122.77),星等 = 1.40,深度 = -1300.00,标题 = 加利福尼亚州科布以西 3 公里
  4. (35.68,-118.10),星等 = 1.50,深度 = -8280.00,标题 = 加利福尼亚州因约肯以西 27 公里
  5. (-23.27,-67.66),星等 = 4.80,深度 = -175320.00,标题 = 智利圣佩德罗德阿塔卡马东南 69 公里

我的猜测是我必须从 onepassbubblesort 返回列表,并再次运行该列表,但我不能使用 void 方法来完成

最佳答案

您的排序方法仅在存在匹配时移动 minIdx = i; 指针,导致如果第一个元素较小,则它不会对齐。实际上,您只是交换第一个元素和匹配时遇到的任何其他元素。

解决此问题的方法是将 minIdx = i; 移到 if 语句之外,以便始终会调用它:

for (int i=0 + 1; i< quakes.size()-numSorted; i++) {

if (quakes.get(i).getMagnitude() < quakes.get(minIdx).getMagnitude()) {
QuakeEntry qi = quakes.get(i);
QuakeEntry qmin = quakes.get(minIdx);
quakes.set(i,qmin);
quakes.set(minIdx,qi);
}
minIdx = i;
}

由于您的编码方式是接受 numSorted 参数,因此问题的另一个解决方案是将 minIdx 分配给此变量:

minIdx = numSorted;

关于java - 冒泡排序不对单个元素进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34806762/

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