Java 如何仅使用7个比较对5个项目进行排序

Java 如何仅使用7个比较对5个项目进行排序,java,sorting,comparison,Java,Sorting,Comparison,我对如何仅使用7个比较对5个项目进行排序非常感兴趣。 我想我理解这个理论,但不幸的是,我不能把它写成代码。 我真的试着去理解它,但在我看来它似乎不起作用。例如在数字5,4,3,2,1上 谁能给我一个示例代码,但不要用LISP?我更喜欢Java或C/C++。这对我在学校真的很有帮助 先谢谢你 对我的英语很抱歉 编辑: 这里我添加了一些我用Java编写的代码。 变量a、b、c、d、e只是为了更好地定位代码。 我能够为特定的输入项编写特定的代码,这没有问题。 但我不会写一般的代码 public st

我对如何仅使用7个比较对5个项目进行排序非常感兴趣。 我想我理解这个理论,但不幸的是,我不能把它写成代码。

我真的试着去理解它,但在我看来它似乎不起作用。例如在数字5,4,3,2,1上

谁能给我一个示例代码,但不要用LISP?我更喜欢Java或C/C++。这对我在学校真的很有帮助

先谢谢你

对我的英语很抱歉

编辑: 这里我添加了一些我用Java编写的代码。 变量a、b、c、d、e只是为了更好地定位代码。 我能够为特定的输入项编写特定的代码,这没有问题。 但我不会写一般的代码

public static void sort(int p[]) {

    int a = 0;
    int b = 1;
    int c = 2;
    int d = 3;
    int e = 4;


    if (p[a] > p[b]) {
        swap(p,a,b);
        }
    if (p[c] > p[d]){
        swap(p,c,d);

        }

    if (p[b] > p[d]){
        swap(p,b,d);

    }

    if (p[e] < p[b]) {

        if (p[e] < p[a]) {

            swap(p,a,e);
            swap(p,d,e);
            //swap(p,b,d);//BLBE
        }else{

            swap(p,b,e);
            swap(p,d,e);
        }
    }else {
        if (p[e] < p[d]) {
            swap(p,d,e);

        }
    }

    if (p[c] < p[b]) {

        if (p[c] < p[a]) {

            swap(p,a,c);
            swap(p,b,c);
        }else
        {

            swap(p,c,b);
        }
    }else {
     if (p[c] > p[d]) {

        swap(p,d,c);
     }
    }

}
公共静态无效排序(int p[]{
int a=0;
int b=1;
int c=2;
int d=3;
int e=4;
如果(p[a]>p[b]){
互换(p、a、b);
}
如果(p[c]>p[d]){
互换(p、c、d);
}
如果(p[b]>p[d]){
互换(p、b、d);
}
if(p[e]p[d]){
互换(p、d、c);
}
}
}

编写基于比较的通用排序算法需要O(n lg n)个比较。如果我没有弄错的话,那么所有的O(nlgn)排序算法将在大约7次比较中对5个项目进行排序。如果幸运的话,可以合并排序、堆排序和快速排序。

编写基于比较的通用排序算法需要O(n lg n)个比较。如果我没有弄错的话,那么所有的O(nlgn)排序算法将在大约7次比较中对5个项目进行排序。如果你幸运的话,可以合并排序、堆排序和快速排序。

如果你理解这个理论,并且你已经尝试过自己编写一些代码,那么我建议发布你所写的内容,并描述你遇到的具体问题。简单地问代码的问题不太可能在这里得到很多答案。编写一个程序,创建一个二叉树,将所有排序的数字插入其中。这就是0+1+2+3+4=10次比较。2.修改程序,以便在第四次插入之前,图形在中间数字周围保持平衡。这将为您提供0+1+2+2+3=8个比较。3.修改程序,以便在第五次插入之前,根元素的较大子树以与第2步相同的方式进行平衡,这将减少一次比较。@Rosh:这就是答案,为什么不将其作为一个整体发布?如果您理解该理论,并且您已经试着自己编写了一些代码,然后我建议把你写的东西贴出来,描述一下你遇到的具体问题。简单地问代码的问题不太可能在这里得到很多答案。编写一个程序,创建一个二叉树,将所有排序的数字插入其中。这就是0+1+2+3+4=10次比较。2.修改程序,以便在第四次插入之前,图形在中间数字周围保持平衡。这将为您提供0+1+2+2+3=8个比较。3.修改程序,以便在第五次插入之前,根元素的较大子树以与第2步相同的方式进行平衡,这将减少一次比较。@Rosh:这就是答案,为什么不将其作为一个来发布?我相信你的意思是O(lg n!)=O(n lg n)?通过七次比较应该可以做到这一点。@templatetypedef:谢谢你的更正,我错了。我的帖子已经被编辑以反映这一点。我相信你的意思是O(lgn!)=O(nlgn)?通过七次比较应该可以做到这一点。@templatetypedef:谢谢你的更正,我错了。我的文章经过编辑以反映这一点。