看到一个蛮有意思的题目。
如题
  有任意五个数 如  1 2 3  4 5
他们的顺序 是任意的
现在 要把他们 排成从大到小的顺序
  最少要几次?
  怎么比较?

解决方案 »

  1.   

    用JAVA的话 Arrays.sort(),
    用算法的话,就挨个比吧
      

  2.   

    直接用Arrays.sort()吧
    用java还自己写排序,那还用java做甚?
      

  3.   

    晕,这有什么意思,就是上边说的用
    把你你说的数字放到数组中如:
    int [] a={ 1,2,3,4,5};
    int b = a.length();
    Arrays.sort(a);
    for(int i <b;i>=0;i--){
    System.out.println(a[i]);
    }
    打出来就OK了
      

  4.   

    最少需要6次 最糟糕7次设5个数 A,B,C,D,E                                              luck   unluckA:B =L                                                         1ime     1C比较L的头部或者尾部 =L                                        1time    1D比较L的中段,然后向L的头部或者L的尾部比较  = L                2time    2E比较L的中段(第2,或者第3),重复上面的步骤 最糟糕3次 运气好2次 2time    3 
    -------------------------------------------------------------------------------
    total                                                          6time   7time接分
      

  5.   

    补充说明下Arrays.sort();默认是按升序来排列了,需要实现java.util.Comparator,就可以直接降序来排序了。
    Arrays.sort(T[] a, Comparator c)  根据指定比较器产生的顺序对指定对象数组进行排序。比较的笨的方法是枚举过去,一般用2分的方式,找本数据结构的书看看里面有很具体的介绍。
      

  6.   

    我想大家都错误理解我的意思了吧
      通常的排序算法 如 快速,归并,堆排序 的比较次数都会
    随着目标数的 排列顺序的不同 而发生变化就拿 syoumei(砸楼上的窗户,往楼下丢臭鸡蛋) 的 来说
     他最后的比较次数 可能是 6次 也可能是 7次
     而现在 需要的是 最终的次数不管你给的数是怎么排列的
        他都只需要固定的 n次 
      现在 求最小 n 
    ^-^
      

  7.   

    我需要 强调的 是
    给出的五个数的 顺序的 任意性
    何 比较次数的唯一性
     
      为 影响大家的判断
      我 还是把 这几个数

    a1 a2 a3 a4 a5 来代替吧
    因为 其中的一组数中其中一种排列方法
      

  8.   

    上面的回复掉了句话
    因为 1,2,3,4,5 只是 其中的一组数中其中一种排列方法这个题目是个ACM题
      

  9.   

    有点意思 不过我怎么看着像数字电路题阿最新的ideaa:b得到排好大小的ABc:d得到排好大小的CDA:CB:D 得到排好大小的ABCD(包含,左交错,右交错 3种结果 4种排列) e:Ae:Be:C e:D 得到排好大小的ABCD任意数字比较8次
      

  10.   

    lz 这个有答案吗?我想的方法是n*(n-1)/2 次,好象多了点。
      

  11.   

    a:b得到排好大小的ABc:d得到排好大小的CDA:CB:D 得到排好大小的ABCD(包含,左交错,右交错 3种结果 4种排列) ===================================================
    有问题!!!!上面的得到排好序的AB和CD然后A和C比较先假设C>A   D>B还是不能得出排好序的ABCD啊C>A
    但C不一定大于B
      

  12.   

    这是一个朋友跟我说的一个ACM 训练题
       我 苦苦思索没有 想出来
        答案 是 7次,听说要根据不同的顺序采取 不同的排序方法
        据说有点小复杂
         我哈没想出来  :<
      

  13.   

    agree with
    a:b得到排好大小的ABc:d得到排好大小的CDA:CB:D 得到排好大小的ABCD(包含,左交错,右交错 3种结果 4种排列) ===================================================
    有问题!!!!上面的得到排好序的AB和CD然后A和C比较先假设C>A   D>B还是不能得出排好序的ABCD啊C>A
    但C不一定大于B
      

  14.   

    A  B
     CD AB
    C  DA B
     C D A B
    C D
    ============
    ABCD
      

  15.   

    brucesea(找不到工作,郁闷中
    how to implement it??
      

  16.   

    A B C D E
    (1) A B比较,C D比较 (2次),假设A<B, C<D
    (2) max(A, B) 和 max(C, D)比较,(1次),即B和D比较,假设B<D,得到A<B<D, C<D
    (3) E二分与A B D比较,即以B为中心比较(2次),可得到A B D E的关系
    (4) C再次二分与A B D比较(同时注意C<D),即以B为中心比较(2次),可得到A B C D E的关系
    2+1+2+2=7决策树模型看《算法导论》8.1
    n个数,决策树的叶子节点最少n!=120
    高为h的决策树叶子节点最多2^h
    2^h > 120 h >=7
      

  17.   

    修改
    4) C再次二分与A B E D比较2^h >= 120 h >=7
      

  18.   

    问下你们的算法都是什么书上学的呀!~我不是学计算机的,自己学的java基础不好想学点,数据结构和算法,还软件工程都什么书好介绍几个吧。
      

  19.   

    选择排序,
    核心代码:
    public static void sort(int[] a1){
       
       int k temp;
       for(int i=0;i<a1.length;i++){
          k=i;
          for(int j=i+1;j<a1.length;j++){
          if(a1[j]>a1[k]) k=j;
          }
       } 
       temp=a1[i];a1[i]=a[k];a1[k]=temp;}