这是我根据算法写的一个希尔排序,程序在运行的时候应该是出现死循环了,不暴错,cpu占用量大,程序也就一直晾着,但是分析不出来什么原因,我是根据数据结构书上的算法,将它实现为代码,请各位帮帮忙啊!下面我把函数的代码复制到下面:public static void shellSort(int[] a) {
for(int delta=1+a.length/3;delta>=1;delta=1+delta/3) {
for(int i=0;i<delta;i++) {
deltaInsertionSort(a,i,delta);
}
}
}
public static void deltaInsertionSort(int[] a,int i,int delta) {
int temp,k;
Boolean flag;
for(int j=i+delta;j<a.length;j=j+delta) {
temp = a[j];
k = j;
flag = true;
do {
if(a[k-delta]<=temp) {
flag = false;
} else {
a[k] = a[k-delta];
k = k-delta;
if(k==i) {
flag = false;
}
}
} while(flag);
a[k] = temp;
}
}

解决方案 »

  1.   

    for(int delta=1+a.length/3;delta>=1;delta=1+delta/3) {最后这个增量写错了吧?delta=1+delta/3 根本不会增加啊,每次都是定值?
      

  2.   

    当delta循环到1的时候
    for (int delta = 1 + a.length / 3; delta >= 1; delta = 1 + delta / 3) 
    进入死循环,也就相当于
    for (int delta = 1; delta >= 1; delta = 1) 
      

  3.   

    当delta<3 的时候,delta=1,然后 delta>=1 一直成立,然后会一直循环,CPU内存使用量肯定增加了。你这个程序也没有输出什么消息,也没有返回结果。
    就算运行了也什么都得不到,你的数组a最终还是刚开始定义的。