private Int[] arry=new arry[10]; //成员变量
 
Int[0]=32;
Int[1]=10;
Int[2]=78;
Int[3]=89
Int[4]=67;
Int[6]=108;
Int[7]=34;
Int[8]=45
Int[9]=100;public void insertionSort()
  {
    int in,out;    for(out=1;out<arry.lenth();out++)
      {
        long temp=a[out];
        in = out;
       while(int>0 && a[in-1]) >= temp)
         {
           a[in] = a[in-1];
        --in;
}
        a[in] =temp
}}
在这个插入排序中的--in改成in++,结果有什么不同,请高手解决下,

解决方案 »

  1.   

    你这程序不能通过编译吧。有以下错误:
    private Int[] arry=new arry[10]; //成员变量 Int[0]=32; //这一段怎么写到了方法外?
    Int[1]=10; 
    Int[2]=78; 
    Int[3]=89 
    Int[4]=67; 
    Int[6]=108; 
    Int[7]=34; 
    Int[8]=45 
    Int[9]=100; 
    public void insertionSort() 
      { 
        int in,out;     for(out=1;out <arry.lenth();out++) //应该用arry.length
          { 
            long temp=a[out];      //为什么要用long?
            in = out; 
          while(int>0 && a[in-1]) >= temp)  //应该用in?
            { 
              a[in] = a[in-1]; 
            --in; 

            a[in] =temp 
    } } 
      

  2.   

    插入排序就是把当前元素插入到前面已经排好的序列中合适的位置,
    第x趟:假设前面x个元素已经排好序了。
    第x+1个元素插入到前面排序好的中,方法是把前面所有大于a[x+1]都向后移动一个位置。空出的位置放入a[x].这个用以下代码实现:
             int temp=a[out];      //a[out]就是第x个元素。
            in = out; 
            while(int>0 && a[in-1]) >= temp)  //如果a[in-1]>=temp就把a[in-1]向后移动一个位置(temp就是a[x]) 
            { 
               a[in] = a[in-1]; 
               --in;                          //这里的--in就是再向前走,准备看看前面还有没有比temp大的元素了。
            } 所以--in是不能改为in++的,了解了算法,才能了解代码。
    第一趟:
       [32]、10、78、89、67、108、34、45、100
       结果为:
       [10、32]、78、89、67、108、34、45、100
    第二趟:
        [10、32]、78、89、67、108、34、45、100
        结果为:
        [10、32、78]、89、67、108、34、45、100
    第三趟:
         [10、32、78]、89、67、108、34、45、100
         结果为:
         [10、32、78、89]、67、108、34、45、100
    第四趟:要把67插入到前面[]中,就要把[]中所有比67大的元素都向后移动一个位置。78和89都向后移,空出原来放78的位置放入67.
         [10、32、78、89]、67、108、34、45、100
         结果为:
         [10、32、67、78、89]、108、34、45、100
    以下的步骤类似。