黑马程序员技术交流社区
标题:
利用折半查找怎么增加元素
[打印本页]
作者:
早知道
时间:
2013-9-27 20:25
标题:
利用折半查找怎么增加元素
本帖最后由 早知道 于 2013-9-27 20:33 编辑
public class Test7 {
/**
* @param args
*/
public static void main(String[] args) {
int[] arr ={2,4,5,7,8,19,32,45};
int index = halfSearch(arr,8);
int[] array1 = new int[arr.length+1];
int[] array2 = new int[arr.length-index];
for(int i=0,j=0;i<index;i++,j++){
array1[j]=arr[i];
}
for(int i=0;i<array1.length;i++){
System.out.println(array1[i]);
}
for(int i=index,j=0;i<arr.length;i++,j++){
array2[j]=arr[i];
}
System.out.println("====");
array1[index]=8;
for(int i=index+1,j=0;i<array1.length;i++,j++){
array1[i]=array2[j];
}
for(int i=0;i<array1.length;i++){
System.out.println(array1[i]);
}
}
public static int halfSearch(int[] arr,int key){
int min=0;
int max=arr.length-1;
int mid=(min+max)/2;
while(arr[mid]!=key){
if(arr[mid]<key){
min=mid+1;
}else if(arr[mid]>key){
max=mid-1;
}
if(min>max)
return -1;
mid=(min+max)/2;
}
return mid;
}
}
复制代码
上面代码是实现在原数组基础上添置8,并且数组要有序的。数组不可改变长度,所以只能新建了,感觉这样很麻烦,不知道还有没有更好的办法?
作者:
doitforyou
时间:
2013-9-27 21:34
本帖最后由 doitforyou 于 2013-9-27 21:35 编辑
/*
折半查找并插入元素,保持有序,原数组长度不变
*/
class InsertEle
{
public static void main(String[] args)
{
int[] arr={2,34,67,87,98,454};
int index =halfSearch(arr,34);
insertEle(arr,34,index);
printArr(arr);
}
//折半查找,返回插入位置
public static int halfSearch(int[] arr, int key)
{
int min = 0;
int max = arr.length-1;
int mid = (min+max)>>1;
while(min<=max)
{
if(key>arr[mid])
min=mid+1;
else if(key<arr[mid])
max=mid-1;
else
return mid;
mid=(min+max)>>1;
}
return min;
}
//原数组插入,倒序插入,这样可避免元素互换麻烦。
//因保证长度不变,原数组最后一个元素自动舍弃
public static void insertEle(int[] arr, int key, int index)
{
for (int i=arr.length-1; i>index; i--)
{
arr[i]=arr[i-1];
}
arr[index]=key;
}
//打印数组
public static void printArr(int[] arr)
{
System.out.print("[");
for (int i=0; i<arr.length; i++)
{
if(i!=arr.length-1)
System.out.print(arr[i]+",");
else
System.out.println(arr[arr.length-1]+"]");
}
}
}
这段代码实现有两个关键点,其中之一是折半查找直接返回的是插入位置,你可以仔细揣摩一下,二是插入时的小技巧,倒序插入,简化代码的同时可以提高效率。
复制代码
作者:
会说话的木头
时间:
2014-6-26 10:55
本帖最后由 会说话的木头 于 2014-6-26 11:17 编辑
doitforyou 发表于 2013-9-27 21:34
大婶 你的方法有bug,会吧最后一位的数覆盖
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2