貌似是二分法,搞了半天还是没有搞懂循环过程,
代码是排序数组从小到大。
希望哪位高手可以分析一下循环过程(比较的过程)。
以一个length为10的数组为例分析一下,谢谢。
本人在线等,分不高,结贴速度快。 public static void sort(int[] a)
{
int n=a.length;
int incr=n/2;
while(incr>=1)
{
for(int i=incr;i<n;i++)
{
int temp=a[i];
int j=i;
while(j>=incr&&temp<a[j-incr])
{
a[j]=a[j-incr];
j-=incr;
}
a[j]=temp;
}
incr/=2;
}
}

解决方案 »

  1.   

    自己举个例子然后照着程序读一下就了解了,注意下最高位和最低位的变化就可以了,给你个连接,有个案例可以看下http://bbs.edu-edu.com.cn/thread-4717-1-26.html
      

  2.   

    你可以用工具,进入Debug模式看看! 比如Eclipse
      

  3.   

    int[] a=new int[]{6,8,4,9,3,7,1,9,2,5};incr=5
    i=5 6 8 4 9 3 7 1 9 2 5 
    i=6 6 1 4 9 3 7 8 9 2 5 
    i=7 6 1 4 9 3 7 8 9 2 5 
    i=8 6 1 4 2 3 7 8 9 9 5 
    i=9 6 1 4 2 3 7 8 9 9 5 incr=2
    i=2 4 1 6 2 3 7 8 9 9 5 
    i=3 4 1 6 2 3 7 8 9 9 5 
    i=4 3 1 4 2 6 7 8 9 9 5 
    i=5 3 1 4 2 6 7 8 9 9 5 
    i=6 3 1 4 2 6 7 8 9 9 5 
    i=7 3 1 4 2 6 7 8 9 9 5 
    i=8 3 1 4 2 6 7 8 9 9 5 
    i=9 3 1 4 2 6 5 8 7 9 9 incr=1
    i=1 1 3 4 2 6 5 8 7 9 9 
    i=2 1 3 4 2 6 5 8 7 9 9 
    i=3 1 2 3 4 6 5 8 7 9 9 
    i=4 1 2 3 4 6 5 8 7 9 9 
    i=5 1 2 3 4 5 6 8 7 9 9 
    i=6 1 2 3 4 5 6 8 7 9 9 
    i=7 1 2 3 4 5 6 7 8 9 9 
    i=8 1 2 3 4 5 6 7 8 9 9 
    i=9 1 2 3 4 5 6 7 8 9 9 感觉多此一举 直接incr=1
    incr=1
    i=1 6 8 4 9 3 7 1 9 2 5 
    i=2 4 6 8 9 3 7 1 9 2 5 
    i=3 4 6 8 9 3 7 1 9 2 5 
    i=4 3 4 6 8 9 7 1 9 2 5 
    i=5 3 4 6 7 8 9 1 9 2 5 
    i=6 1 3 4 6 7 8 9 9 2 5 
    i=7 1 3 4 6 7 8 9 9 2 5 
    i=8 1 2 3 4 6 7 8 9 9 5 
    i=9 1 2 3 4 5 6 7 8 9 9 
      

  4.   

    不是二分法 无非就是把第N个数跟在它前面incr个数的位置进行比较 后面的比前面的小就交换 交换过了如果它前面的数个数还够incr个 再比较
    其实最后incr=1  第2个数跟第1比较 小的放前面 第3个跟第2个比较 小的放前面 第二个再跟第一个比较 依此类推
    相当于前面的排好序后 往里面插数