RT,谁帮忙优化下,特别是处理r[-1]的那段,看着有点别扭
public class Test1 {
/**
 * 插入排序
 * @param args
 */
public static void main(String[] args) {
int[] r = new int[10];
int i,j,t;
boolean bool;
for(i=0;i<r.length;i++) {
r[i] = (int)(Math.random()*100);
}
for(i=0;i<r.length;i++) {
System.out.print(r[i]+" ");
}
for(i=1;i<r.length;i++) {
t = r[i];
bool = false;
for(j=i-1;t<r[j];j--){         //考虑j=-1,r[-1]时,报错
r[j+1] = r[j];
bool = true;
if(j==0) break;
if(t>=r[j-1]) break;

if(bool) r[j] = t;
}
System.out.println("\nAfter change:");
for(i=0;i<r.length;i++) {
System.out.print(r[i]+" ");
}
}
}

解决方案 »

  1.   

    用这个代码吧,简单点public class Test
    {
    public static void main(String[] args)
    {
    int a[]={1,5,3,8,2,7,6,4,9};
    insertSort(a);
    for(int i=0;i<a.length;i++)
    {
    System.out.println(a[i]);
    }
    }

    public static void insertSort(int[] a)
    {
    for(int i=1;i<a.length;i++)
    {
    for(int j=i;j>0;j--)
    {
    if(a[j]<a[j-1])
    {
    int temp=a[j];
    a[j]=a[j-1];
    a[j-1]=temp;
    }else
    {
    break;
    }
    }
    }
    }

    }
      

  2.   

     把你的排序的核心代码改成下面的就很优化了
    此方法是冒泡排序法
                       for (i = 0; i < r.length; i++) {
    for (j = i; j < r.length; j++) {
    if (r[i] > r[j]) {
    r[i] = r[j] + (r[j] = r[i]) * 0;
    }
    }
      }
      

  3.   


    public static void main(String[] args) {
    int n = 6;
    int a,b,d,e;
    int[] c = new int[n + 1];

    a = 9;//要插入的数

    for (int i = 0; i < n; i++) {
    c[i] = (int) (Math.random() * 100);
    }

    for (b=0;b<n;b++)
    { if (c[b]==a)
    break;
    }
    if (b==n)
    {
    for (b=0;b<n;b++)
    {
    if (c[b]>a)
    break;
    }
    for (d=n;d>b;d--)
    {
    c[d]=c[d-1];
    }
    c[d]=a;
    for (d=0;d<n+1;d++){
    System.out.print(c[d]);
    System.out.println("\n");
    }
    }
    else
    {
    for (e=b;e<n-1;e++)
    c[e]=c[e+1];
    for (e=0;e<n-1;e++)
    System.out.println(c[e]);
    System.out.println("\n");
    }
    }我大1 时写的,看看
    不知道有帮助嘛
    ^_*
      

  4.   

    中间遍历这段改成这样就OK了
          int t;
         int i, j;      for (i = 1; i < array.length; i++) {
                if (array[i] < array[i-1]) {
                    for (j = i; j >= 1; j--) {
                        if (array[j] < array[j-1]) {
                            t = array[j-1];
                            array[j-1] = array[j];
                            array[j] = t;
                        }
                    }
                }
            }
      

  5.   

    6楼的貌似也是冒泡吧,我想的是向我这段程序如何改的更短直接插入排序:依次将每个记录插入到一个有序的子序列中。就是当第i遍时,r[1],r[2],r[3]...r[i-1]是个有序的子序列等待牛人们的更改
      

  6.   

    应该比较简单,楼主怎么写那么麻烦呢。冒泡排序只要两个for就可以写出来了。
      

  7.   

    public class Test1 {
        /**
         * 插入排序
         * @param args
         */
        public static void main(String[] args) {
            int[] r = new int[10];
            int i,j,temp;
            for(i=0;i<r.length;i++) {
                r[i] = (int)(Math.random()*100);
            }
            for(i=0;i<r.length;i++) {
                System.out.print(r[i]+" ");
            }
            for(i=1;i<r.length;i++) {
                temp = r[i];
                j=i-1;
                while(j>=0&&temp<r[j]){
                 r[j+1]=r[j--];
                 r[j+1]=temp;
                }
            }
            System.out.println("\nAfter change:");
            for(i=0;i<r.length;i++) {
                System.out.print(r[i]+" ");
            }
        }
    }