日期:2014-05-20  浏览次数:20726 次

急求解决,折腾一下午了,受打击了!
这是我根据算法写的一个希尔排序,程序在运行的时候应该是出现死循环了,不暴错,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;
}
}

------解决方案--------------------
for(int delta=1+a.length/3;delta>=1;delta=1+delta/3) {

最后这个增量写错了吧?

delta=1+delta/3 根本不会增加啊,每次都是定值?
------解决方案--------------------
当delta循环到1的时候
for (int delta = 1 + a.length / 3; delta >= 1; delta = 1 + delta / 3) 
进入死循环,

也就相当于
for (int delta = 1; delta >= 1; delta = 1)
------解决方案--------------------
探讨
for(int delta=1+a.length/3;delta>=1;delta=1+delta/3) {

最后这个增量写错了吧?

delta=1+delta/3 根本不会增加啊,每次都是定值?