看外国的一本数据结构书籍遇到一个问题:
用二分查找算法实现有序无重复数组的插入操作,我用了一个inPos方法来找到插入的位置,用insert方法来进行插入,编译通过,运行的时候inPos方法出现死循环,求助解决的方法。
————————————————————————————————
//寻找插入位置的数组下表的方法inPos
public int inPos(long insertKey) // insertKey为要插入的数字
{
int lowerBound=0; //定义数组a的上界
int upperBound=nElems-1; /*定义数组a的下界,nElems为数组a中有效(不为0)元素总个数*/
int curIn; //查找光标停留在数组a[]中的当前位置 //开始查找
while(true)
{ curIn=(lowerBound+upperBound)/2; //二分查找
if(curIn==0)
{ if(a[0]>insertKey)
return 0;
}
else
{ if(a[curIn]>insertKey)
{
if(a[curIn-1]<=insertKey)
return curIn;
else
upperBound=curIn-1;
}
else
{
if(a[curIn+1]>insertKey)
return (curIn+1);
else
lowerBound=curIn+1;
}
}
}
} //实现插入操作的方法insert
public void insert(long value) // 把要插入元素放入数组
{
int j=inPos(value);
for(int k=nElems; k>j; k--) // 移动较大的一个元素
a[k] = a[k-1];
a[j] = value; // 插入
nElems++; // 增加有效数组元素个数
}
用二分查找算法实现有序无重复数组的插入操作,我用了一个inPos方法来找到插入的位置,用insert方法来进行插入,编译通过,运行的时候inPos方法出现死循环,求助解决的方法。
————————————————————————————————
//寻找插入位置的数组下表的方法inPos
public int inPos(long insertKey) // insertKey为要插入的数字
{
int lowerBound=0; //定义数组a的上界
int upperBound=nElems-1; /*定义数组a的下界,nElems为数组a中有效(不为0)元素总个数*/
int curIn; //查找光标停留在数组a[]中的当前位置 //开始查找
while(true)
{ curIn=(lowerBound+upperBound)/2; //二分查找
if(curIn==0)
{ if(a[0]>insertKey)
return 0;
}
else
{ if(a[curIn]>insertKey)
{
if(a[curIn-1]<=insertKey)
return curIn;
else
upperBound=curIn-1;
}
else
{
if(a[curIn+1]>insertKey)
return (curIn+1);
else
lowerBound=curIn+1;
}
}
}
} //实现插入操作的方法insert
public void insert(long value) // 把要插入元素放入数组
{
int j=inPos(value);
for(int k=nElems; k>j; k--) // 移动较大的一个元素
a[k] = a[k-1];
a[j] = value; // 插入
nElems++; // 增加有效数组元素个数
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货