根据选择排序

问题描述

我正在尝试根据 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...