黑马程序员技术交流社区
标题:
自己写的【元素插入数组】程序,有问题求指导
[打印本页]
作者:
BlueWing
时间:
2015-9-5 15:19
标题:
自己写的【元素插入数组】程序,有问题求指导
本帖最后由 BlueWing 于 2015-9-5 15:23 编辑
用比较笨的一个办法(详见代码中步骤)做的一个,元素插入数组函数。
思路上有点问题,有地方没考虑到,达不到预想的功能。
代码如下,望老师指导!谢谢
/*
需求:
数组的查找操作。
有一个有序的数组,想要将一个元素插入到该数组中,
还要保证该数组是有序的。
{1,2,3,4,5,5,6,7,8,9}
0
思路:
1,利用插入元素与数组中元素做减法,得到的差值成为新的数组,差值最小的角标+1。
2,数组大小+1,插入元素后面的数组元素整体后移。
步骤:
1,函数返回值为数组,输入值为数组和插入值num。
2,遍历原数组,定义差值数组cha[],cha[x]=num-arr[]。
3,在cha[]数组中,去负号,找到最小值的角标min。
4,定义结果数组arrend[],将最小值角标(包含最小值)之前的数组按原顺序赋值给新数组。
最小值角标+1为插入数字的角标,之后的原数组,赋值给新数组,新数组中的角标+1。
*/
class ArrInBlue
{
public static void main(String[] args)
{
int[] arr=new int[]{1,7,11,22,35,65,77,89,123,999};
int[] arrend=arrin(arr,-3);
printArray(arrend);
}
public static int[] arrin(int[] arr,int num)
{
int[] cha=new int[arr.length];
int[] arrend=new int[arr.length+1];
for(int x=0;x<arr.length;x++)
{
cha[x]=num-arr[x];
if(cha[x]<0)
{
cha[x]=-cha[x];
}
}
int min=0;
for(int x=0;x<cha.length;x++)
{
if(cha[x]<cha[min])
{
min=x;
}
}
for(int x=0;x<arrend.length;x++)
{
if(x>min+1)
arrend[x]=arr[x-1];
else if(x<min+1)
arrend[x]=arr[x];
else
arrend[x]=num;
}
return arrend;
}
public static void printArray(int[] arr)
{
for(int x=0;x<arr.length;x++)
{
if(x!=arr.length-1)
System.out.print(arr[x]+",");
else
System.out.println(arr[x]);
}
}
}
复制代码
作者:
MUFCRyanCR7
时间:
2015-9-5 15:59
顶一下~~~~~~~
作者:
BlueWing
时间:
2015-9-5 15:59
在这个函数中,实际比较的是插入元素与前后元素间的距离大小。
如果插入元素与后面元素距离小,则插入到了后面元素的下一个位置。
该思路不正确。经修改后,代码如下,可实现需求功能。
/*
需求:
数组的查找操作。
有一个有序的数组,想要将一个元素插入到该数组中,
还要保证该数组是有序的。
思路:
1,利用插入元素与数组中元素做减法,如果值为负,则应该放在该元素前面。
2,数组大小+1,插入元素后面的数组元素整体后移。
步骤:
1,函数返回值为数组,输入值为数组和插入值num。
2,遍历原数组,定义临时变量jb,如果num-arr[x]<0,另jb=x。
3,在得到新数组arrend[]中,x<jb则arrend[x]=arr[x];x>jb则arrend[x]=arr[x-1];
4,返回arrend。
*/
class ArrInBlue
{
public static void main(String[] args)
{
int[] arr=new int[]{1,7,11,22,35,65,77,89,123,999};
printArray(arr);
int[] arrend=arrin(arr,67);
printArray(arrend);
}
public static int[] arrin(int[] arr,int num)
{
int[] arrend=new int[arr.length+1];
int jb=arr.length;//如果在原数组中找不到比mun大的数,则把num元素放在数组最后位置。
//该语句也可以放在下面第40行。
for(int x=0;x<arr.length;x++)
{
if(num-arr[x]<0)
{
jb=x;
break;
}
}
for(int x=0;x<arrend.length;x++)
{
if(x>jb)
arrend[x]=arr[x-1];
else if(x<jb)
arrend[x]=arr[x];
else
arrend[jb]=num;
}
return arrend;
}
public static void printArray(int[] arr)//打印数组函数
{
for(int x=0;x<arr.length;x++)
{
if(x!=arr.length-1)
System.out.print(arr[x]+",");
else
System.out.println(arr[x]);
}
}
}
复制代码
作者:
BlueWing
时间:
2015-9-5 16:01
MUFCRyanCR7 发表于 2015-9-5 15:59
顶一下~~~~~~~
谢谢!找到问题了 自己思路不太对。
嘿嘿 估计新手写的 这么麻烦又没技术含量的代码 也没几个人愿意看
作者:
wu199309023
时间:
2015-9-5 18:47
顶一下~~~~~~~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2