java - 我的检查算法不会停止冒泡排序
问题描述
我有一个包含 25 个大小值的文件。我检查了我的冒泡排序算法是否管理了 19 或 20 个循环。我的检查方法不会停止算法,它需要编写 24 个循环。我不明白,我做错了什么。它是 zip 文件,您可以在其中找到数据文件夹和 nov20quakedatasmall.atom fid 进行测试
import java.util.*;
import edu.duke.*;
公共类 QuakeSortInPlace {
public boolean checkInSortedOrder (ArrayList<QuakeEntry> quakes) {
boolean stat = true;
for (int i = 0; i< quakes.size()-1; i++) {
double fParametr = quakes.get(i).getMagnitude();
double sParametr = quakes.get(i+1).getMagnitude();
if (fParametr < sParametr) {
stat = true;
}
else {
stat = false;
break;
}
}
return stat;
}
public void onePassBubbleSort (ArrayList <QuakeEntry> quakeData, int numSorted) {
int loops = 0;
//boolean isSorted = true;
for (int i = 0; i<numSorted; i++) {
//isSorted = true;
for (int k = 0; k<quakeData.size()-i-1; k++) {
double firstCompElement = quakeData.get(k).getMagnitude();
double secondCompElement = quakeData.get(k+1).getMagnitude();
if (firstCompElement > secondCompElement) {
QuakeEntry first = quakeData.get(k);
QuakeEntry second = quakeData.get(k+1);
quakeData.set(k+1 ,first);
quakeData.set(k,second);
// isSorted = false;
}
}
loops++;
if (checkInSortedOrder(quakeData)) {
break;
}
// if (isSorted) {
// break;
// }
}
System.out.print("We needed: "+loops);
}
public void sortByMagnitudeWithBubbleSortWithCheck (ArrayList<QuakeEntry> in) {
int numOfElements = in.size();
int finalNumOfElements = numOfElements-1;
onePassBubbleSort (in, finalNumOfElements);
}
public void testSort() {
EarthQuakeParser parser = new EarthQuakeParser();
String source = "data/nov20quakedatasmall.atom";
ArrayList<QuakeEntry> list = parser.read(source);
System.out.println("read data for "+list.size()+" quakes");
sortByMagnitudeWithBubbleSortWithCheck(list);
for (QuakeEntry qe: list) {
System.out.println(qe);
}
}
}
解决方案
源文件中有两个具有相同值的条目。这会触发 if 语句中的“else”并导致程序继续下一个循环。
if (fParametr < sParametr) {
stat = true;
}
else {
stat = false;
break;
}
更改(fParametr < sParametr)
为(fParametr <= sParametr)
应该可以解决问题。
推荐阅读
- ios - 如何使用 RxSwift 强制点击 UIButton?
- sql-server - 按行求和,而不是整个查询
- angularjs - AngularJS Jasmine 测试 - 从 callFake 函数返回被拒绝的承诺
- linux - 在 Bash 中使用“期望”并以任何顺序响应
- c# - 如何使用不同的 URL 导航当前的 google chrome 或 firefox 或 edge 选项卡
- javascript - 根据滚动位置来回动画
- javascript - 将 JSON 可解析数组流式传输到文件
- javascript - Google Charts (GeoChart) - 欧洲地区无法正确显示
- mysql - mysql UPDATE MAX 组的 MAX 值使用同一组的 MIN(id) 的`open` 值,多行
- javascript - 使用 create-react-app 创建应用程序时出现 React 和 Bootstrap4 问题