黑马程序员技术交流社区
标题:
哪位 大神给我个思路??
[打印本页]
作者:
荣斌
时间:
2015-9-2 15:41
标题:
哪位 大神给我个思路??
有一个有序的数组,想要将一个元素插入到该数组中,
还要保证该数组是有序的。如何获取该元素在数组中的位置
作者:
丶不缺小哥范儿
时间:
2015-9-2 15:41
class chazhao
{
public static void main(String[] args)
{
int[] arr = {3,2,1,5,4,2,9};
int index = getIndex(arr,2);
System.out.println("index="+index);
}
public static int getIndex(int[] arr,int key)
{
for(int x=0; x<arr.length; x++)
{
if(arr[x]==key)
return x;
}
return -1;
}
}
就是在上代码的数组中查找,你要找的元素,找到了你要告诉他在数组中的位置,假如要找的元素是2,遍历这个元素,如果找的元素和这个key相等,就是说找到了,那就输出这个数x,否则也就是没找到,输出-1.
作者:
董兴朋
时间:
2015-9-2 16:40
要是我的话,会用这个数从第一个数开始比较大小,当这个数比前面一个数大,比后面一个数小,那么它的位置就定了。不知道能不能帮你,希望有点帮助。
作者:
pyy061
时间:
2015-9-2 16:41
有序的数组的话,定义两个数组a[],b[],数组b比数组a长度要多1,用来打印插入数据后的数组
先接收这个插入的数
用循环跟a[]数组的元素值进行比较
循环里写个if语句,当插入的数小于或者等于a[i]的时候,跳出,否则把a[i]的值赋值给b数组同样位置的元素
再把插入的数据放到b数组里,进行个冒泡排序就好了.
作者:
a4903913
时间:
2015-9-2 17:25
//要在一个有序的数组中插入一个数,插入完成后保持数组的有序
public class ZheBan {
public static void main(String[] args) {
int[] arr = {1,3,5,8,10,15,46};
System.out.println(getIndex(arr, 10));
}
/*
* 折半排序
*/
public static int getIndex(int[] arr,int key){
int max = arr.length-1,min = 0,mid;
while (min <= max) {
mid = (min + max) / 2;
if (key > arr[mid]) {
min = mid + 1;
}else if (key < arr[mid]) {
max = mid -1;
}else{
return mid;
}
}
return min;
}
}
作者:
a4903913
时间:
2015-9-2 17:30
看代码 不明白问我!!!!!!!
作者:
王海彬
时间:
2015-9-2 21:29
老毕的视频有讲啊在数组的折半排序中就有这个,你去看下就行了
作者:
MilesMatheson
时间:
2015-9-2 22:01
你得说是整型数组呢还是字符型数组哈?要是我,我会存入数组,一个冒泡排序;想要找某个元素的话,直接遍历数组,看哪个元素跟指定元素相同就输出其角标;o了
作者:
残影
时间:
2015-9-2 22:50
毕老师第4天视频,折半查找里面有讲。
作者:
lishuai881512
时间:
2015-9-2 23:11
我也看到过 看视频后自己多敲代码
作者:
hhuxiaolang
时间:
2015-9-2 23:13
视频中就有讲解的,折半排序,获取的min值即是
作者:
儿时往事
时间:
2015-9-2 23:57
过来看看
作者:
15325501970
时间:
2015-9-3 00:32
火车上睡不着
作者:
zhch1377
时间:
2015-9-3 08:40
这个我是真的不知道不知道
作者:
肖天长
时间:
2015-9-3 11:41
折半遍历数组,返回最小值就是要插入元素的位置
作者:
Qf-nice
时间:
2015-9-3 17:23
折半查找,
作者:
球球_
时间:
2015-9-3 23:58
去看老毕的视频吧
作者:
BlackHorse001
时间:
2015-9-4 11:27
/*练习插入一个数进一个数组,并保证数组有序*/
public class HalfSeach
{
public static int halfSeach(int[] n,int key)
{
int min=0,max=n.length-1,mid;
mid=(min+max)>>1;
while(n[mid]!=key)
{
if(key>n[mid])
min=mid+1;
else if(key<n[mid]) max=mid-1;
mid=(min+max)>>1;
while(min>max) return -1;
} return mid;
}
public static int halfSeach2(int[] n,int key)
{
int min=0,max=n.length-1;
int mid=(min+max)>>1;
while(min<=max)
{ if(key>n[mid]) min=mid+1;
else if(key<n[mid]) max=mid-1;
else return mid; //这里的mid'包含数组只有一个数和插入的数和数组中的数相同的情况,这里就是插入的下标值;
mid=(min+max)>>1;
} return -1; //这里将-1改为min值,就是插入数的下标值。
}
/*public static void inserNumber(int[] n,int inserNum) java中数组不可扩容,要通过collection来做ArrayList.
{
int min=0,max=n.length-1,mid;
mid=(min+max)/2;
while(min==max)
{
if(inserNum>n[mid]) min=mid+1;
else if(inserNum<n[mid]) max=mid-1;
mid=(min+max)>>1;
break;
}int x=n.length+1;
if(n[mid]>inserNum) {for(int i=x;i>mid;i--) {n[i]=n[i-1];n[mid]=inserNum;}}
else if(n[mid]<=inserNum) {for(int i=n.length;i>mid+2;i--){n[i]=n[i-1];n[mid+1]=inserNum;}}
}*/
public static void printArray(int[] n)
{ System.out.print("[");
for(int i=0;i<n.length;i++)
{ if(i!=n.length-1)
System.out.print(n[i]+", ");
else System.out.print(n[i]);
} System.out.println("]");
}
public static void main(String[] args)
{
int[] n={1,3,4,5,7,9,12,23,45,67,90,123};
System.out.println(halfSeach2(n,23));
System.out.println(halfSeach2(n,231));
inserNumber(n,10);
printArray(n);
}
}
作者:
heima_huang
时间:
2015-9-4 20:32
可以考虑二分法~节省时间,效率也高
作者:
姜群
时间:
2015-9-4 23:13
给数组排序你应该会吧,可以把他当做数组里面的元素进行排序啊,找到大于和小于他最接近的俩个值,取大于他那个数的索引值就可以了
作者:
我来了
时间:
2015-9-5 09:45
折半查找,然后把返回值改成min
作者:
327037419
时间:
2015-9-5 11:49
List lt = new LinkedList();
List lt2 = new LinkedList();
//
for (int j = 0; j <= 9; j++) {
lt.add("a" + j);
}
System.out.println(lt);
// Collections.shuffle(lt);//随机排序
//
// System.out.println(lt);
//
// Collections.reverse(lt);//逆序
// System.out.println(lt);
// System.out.println(lt);
// Collections.reverse(lt);//逆序
// Collections.reverse(lt);//逆序
Collections.sort(lt);
System.out.println(lt);
//必须滴排序后才能折半查找
System.out.println(Collections.binarySearch(lt, "a0"));
大哥把分给我吧!
作者:
弄啥嘞。
时间:
2015-9-5 23:25
有序的数组
1,判断数组的长度.
2,通过折半查找找到位置.
3,插入数组,把后半数组依次后移(用for循环).
基本OK了.就是这个思路.
作者:
生存追求
时间:
2015-9-6 23:46
用indexOf()
作者:
kitboxer
时间:
2015-9-7 20:22
你没好好看基础视频吧,毕老师讲数组时专门解决了这个问题
作者:
Java_EE
时间:
2015-9-10 15:27
二分查找法
作者:
小王很忙
时间:
2015-9-11 10:13
我也来学习一下
作者:
Surprise
时间:
2015-9-12 09:50
用二分查找,虽然找不到,但是最终的指向就是你要插入的位置,获取索引,在该索引插入要插入的数据即可!!!
作者:
Surprise
时间:
2015-9-12 09:52
用二分查找查找该元素,(虽然查不到)获取最终索引,在该索引下插入要插入元素即可!!!
作者:
Surprise
时间:
2015-9-12 09:55
用二分查找,获取(返回)查找的最终索引。在该索引下插入即可
作者:
hello隔壁老李
时间:
2015-9-12 10:16
遍历有序数组和它比较,比他小的继续比较,比它大的停,插入这个数的后面。。。
或者看毕老师的视频,折半查找法
作者:
a334
时间:
2015-9-14 20:24
这个简单,从第一个书开始比较找到一个合适的位置以后,将这个位置后面的数都往后移。不过这样实现数组长度要至少留一位给这个数。后面学到容器(Collection类)的话,会比较方便,用Iterator对象做迭代器,可以方便的实现对容器内元素的便利操作。其中的原理 有点类似于指针。
作者:
那风景如花
时间:
2015-9-15 22:04
插入排序
作者:
菊花爆满山
时间:
2015-9-15 22:45
此问题已解决
作者:
gannenggufen
时间:
2015-9-17 20:42
排序,再二分查找可以吗?
作者:
super_qilin
时间:
2015-9-18 09:32
最简单的方法就是遍历一遍数组,找到合适的位置,但是这样效率低,可以利用二分查找的方法,找到合适的位置
作者:
王贺明
时间:
2015-9-24 16:33
折半查找效率高
作者:
Arron
时间:
2015-9-25 23:04
public class ZheBan {
public static void main(String[] args) {
int[] arr = {1,3,5,8,10,15,46};
System.out.println(getIndex(arr, 10));
}
/*
* 折半排序
*/
public static int getIndex(int[] arr,int key){
int max = arr.length-1,min = 0,mid;
while (min <= max) {
mid = (min + max) / 2;
if (key > arr[mid]) {
min = mid + 1;
}else if (key < arr[mid]) {
max = mid -1;
}else{
return mid;
}
}
return min;
}
}
作者:
丶不缺小哥范儿
时间:
2015-9-29 00:17
黑马币哟 ~亲
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2