如何解决我的检查算法不会停止气泡排序
我有一个文件,其大小值为25。我检查过我的气泡排序算法是否可以管理19或20个循环。我的检查方法不会停止算法,它会写入所需的24个循环。我不明白,我做错了。 It is zip file,where you can find data folder and nov20quakedatasmall.atom fid to test
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)
应该可以解决问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。