问题描述
我正在尝试根据 1 v 1 选择对一组对象进行排序。为此,我基本上假设如果 A>B 和 B>C,则 A>C。这将大大减少问题的数量。
当您向排序列表添加新元素时,您需要查看它是属于列表的上部还是下部,以便与中间元素进行比较。您继续这样做,直到找到确切位置。
这段代码做得不太好,显然错误在while循环上,但我似乎找不到它。有时应该放在最后,有时不应该放在最后,其他时候它会多次显示问题...
作为参考,这个算法与我的非常相似(Sorting a set of objects by a user's preference)
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
static String [] list = {"mac n cheese","kebab","burger","pizza"};
private static int compare(String s1,String s2) {
Scanner sc=new Scanner(system.in);
System.out.println("Which one do you prefer? "+s1+" or "+s2+". Press 0 if the first or 1 if the second");
return sc.nextInt();
}
public static void main(String[] args) {
ArrayList<String> sort = new ArrayList();
/*pseudo
Add first two elements by comparison
Select one element and see where it belongs
do until last one is placed
*/
double pos;
int n=compare(list[0],list[1]);
if(n==1){
sort.add(list[1]);
sort.add(list[0]);
}
else {
sort.add(list[0]);
sort.add(list[1]);
}
double s=0.0;
for(int i=2; i<list.length; i++) {
s=(double) sort.size()/2;
pos=s;
n=(int) pos;
do {
if(sort.size()<=n) {
break;
}
if(n<0) {
n=0;
break;
}
n=compare(list[i],sort.get(n));
s=s/2;
if(n==0) {
pos=pos-s;
}
else {
pos=pos+s;
}
n=(int) pos;
if((pos-(double)n)>=0.5) {
n++;
}
}while(s>0.5);
sort.add(n,list[i]);
}
for(int i=0; i<list.length; i++) {
System.out.println((i+1)+". "+sort.get(i));
}
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)