static void xzOrder(int list[]) {
        int tmp = 0;
        int iLength = list.length;
        for (int i = 0; i < iLength ; i++) {
            for (int j = i; j < iLength ; j++) {
                if (list[j] > list[i]) {
                    tmp = list[j];
                    list[j] = list[i];
                    list[i] = tmp;
                }
            }
        }
  
    }      public void getOrderBy() {        int iList[] = {9, 3, 6, 1, 2, 3, 1, 1, 2, 2, 11, 1, 111};
        int tmp = 0;
        int iLength = iList.length;
        for (int i = 0; i < iLength; i++) {
            for (int j = i+1; j < iLength; j++) {
                if (iList[i] > iList[j]) {
                    tmp = iList[i];
                    iList[i] = iList[j];
                    iList[j] = tmp;
                }
            }
        }
    }   for (int i = 0; i < iLength; i++) {
            for (int j = i+1; j < iLength; j++) {
          for (int i = 0; i < iLength ; i++) {
            for (int j = i; j < iLength ; j++) {

解决方案 »

  1.   

    j = i + 1 的好点吧,会快一点第一次循环会比较arr[i]>arr[i+1]
    而j = i的第一次会比较arr[i]>arr[i],没必要了
      

  2.   

    在算法分析中,这两种方法的效率是一样的,都是二次方的嵌套for循环,真要说那个更快些,就
    for (int i = 0; i < iLength; i++) {
                for (int j = i+1; j < iLength; j++) {
    这个,它省去了第一个数与自身的比较,但这在算法中是忽略不计的差别^_^
      

  3.   

    其实还有进一步的优化空间
    for(int i=0;i<iLength-1;i++)
      for(int j=i+1;j<iLength;j++)
         ....
      

  4.   

    j = i + 1 的好点,从选择排序的算法思想来说更清晰,前i个表示已经排好序,从j开始的是待排序的