冒泡排序不排序一个元素
Bubble Sort not Sorting One Element
我有两个必须是 void 方法的方法,它们使用名为 Magnitude 的列表中元素的属性使用冒泡排序从最小到最大对它们进行排序,OnePassBubbleSort 方法一次对一个元素排序
和 sortByMagnitudeWithBubbleSort 运行s 排序获得答案所需的时间问题是 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), mag = 1.50, depth = -8280.00, title = 27km W of Inyokern, California
- (36.22, -117.89), mag = 2.60, depth = -1450.00, title = 12km ESE of Olancha, California
- (36.95, -121.57), mag = 1.00, depth = -8660.00, title = 6km S of Gilroy, California
- (38.82, -122.77), mag = 1.40, depth = -1300.00, title = 3km W of Cobb, California
我的结果输出是
- (36.95, -121.57), mag = 1.00, depth = -8660.00, title = 6km S of Gilroy, California
- (36.22, -117.89), mag = 2.60, depth = -1450.00, title = 12km ESE of Olancha, California
- (38.82, -122.77), mag = 1.40, depth = -1300.00, title = 3km W of Cobb, California
- (35.68, -118.10), mag = 1.50, depth = -8280.00, title = 27km W of Inyokern, California
- (-23.27, -67.66),星等 = 4.80,深度 = -175320.00,标题 = 智利圣佩德罗德阿塔卡马东南 69 公里
我的猜测是我必须 return 来自 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;
我有两个必须是 void 方法的方法,它们使用名为 Magnitude 的列表中元素的属性使用冒泡排序从最小到最大对它们进行排序,OnePassBubbleSort 方法一次对一个元素排序 和 sortByMagnitudeWithBubbleSort 运行s 排序获得答案所需的时间问题是 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), mag = 1.50, depth = -8280.00, title = 27km W of Inyokern, California
- (36.22, -117.89), mag = 2.60, depth = -1450.00, title = 12km ESE of Olancha, California
- (36.95, -121.57), mag = 1.00, depth = -8660.00, title = 6km S of Gilroy, California
- (38.82, -122.77), mag = 1.40, depth = -1300.00, title = 3km W of Cobb, California
我的结果输出是
- (36.95, -121.57), mag = 1.00, depth = -8660.00, title = 6km S of Gilroy, California
- (36.22, -117.89), mag = 2.60, depth = -1450.00, title = 12km ESE of Olancha, California
- (38.82, -122.77), mag = 1.40, depth = -1300.00, title = 3km W of Cobb, California
- (35.68, -118.10), mag = 1.50, depth = -8280.00, title = 27km W of Inyokern, California
- (-23.27, -67.66),星等 = 4.80,深度 = -175320.00,标题 = 智利圣佩德罗德阿塔卡马东南 69 公里
我的猜测是我必须 return 来自 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;