黑马程序员技术交流社区
标题:
关于有序数组中插入一个元素的小程序
[打印本页]
作者:
夏凡
时间:
2013-3-18 16:51
标题:
关于有序数组中插入一个元素的小程序
本帖最后由 夏凡 于 2013-3-20 12:33 编辑
/*
程序功能:在有序数组中插入一个元素
*/
class ArrInsert
{
public static void main(String[] args)
{
int arr[] ={1, 2, 3, 4, 6, 7};
System.out.print("插入前:");
arrPrint(arr);
insert(arr, 5);
System.out.print("插入后:");
arrPrint(arr);
}
public static void arrPrint(int arr[]) //打印数组中的元素
{
for(int i=0; i<arr.length; i++)
{
System.out.print(arr[i]+" ");
}
System.out.println();
}
public static int search(int arr[], int x) //查找插入位置
{
int low=0, mid, high=arr.length-1;
while(low <= high)
{
mid = (low+high)/2;
if(x < arr[mid])
{
high = mid-1;
}
else
if(x > arr[mid])
{
low = mid+1;
}
}
return mid;
}
public static void insert(int arr[], int x) //插入元素
{
int local=search(arr, x);
for(int i=arr.length-1; i>=local; i--)
{
arr[i+1] = arr[i];
}
arr[local] = x;
}
}
复制代码
程序报错说“return mid”中的mid未初始化,求教高手应该怎么修改
作者:
HM刘博
时间:
2013-3-18 16:59
在程序第27行int low=0, mid, high=arr.length-1;中mid应该赋个初值,即mid=0
作者:
刘海浩
时间:
2013-3-18 17:19
int low=0, mid, high=arr.length-1;只是对low和hight进行了赋值操作,并没有对mid进行赋值。 int low=0, mid=
xx
, high=arr.length-1;
作者:
陈丽莉
时间:
2013-3-18 18:28
若还有问题,请继续追问,没有的话,请将帖子分类改成【已解决】~
作者:
丘凤光
时间:
2013-3-18 19:25
楼主的查找插入位置函数写错了,应该为
public static int search(int arr[], int x) //查找插入位置
{
int low=0,mid,high=arr.length-1;
while(low <= high)
{
mid = (low+high)/2;
if(x < arr[mid])
{
high = mid-1;
}
else if(x > arr[mid])
{
low = mid+1;
}
else
{
return mid;
}
}
return low;
}
复制代码
这个例子在毕向东老师黑马程序员_毕向东_Java基础视频教程第04天-07-数组(折半查找)里有介绍。
按毕老师这样写mid是可以不初始化的。
还有,楼主的插入元素的函数也是错误的。因为数组声明并初始化了以后长度是不可以改变的,这样用固定了长度的数组插入一个元素肯定盛不下,会溢出报错。
这确的做法应该是再声明一个长度比原数组长度大1的数组接收插入5后的新数组然后再打印。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2