JAVA 有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

JAVA 编写
有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
(升序排列),刚入门JAVA这题较困难!!
那个用list的,我无法理解,因为我刚入门数组是刚学个开头

/**
被你的提问牵着走了,其实这个问题很简单,反正是在已排好序中插入一个数,
那就先新建一个数组,把原来的数组中的数据全复制过去,一并将要插入的数也放进去(放在开始或结尾都行),然后重新排序就行了,原来我还想先找出插入点,再作处理,其实从效率上说,感觉差不多,所以就有如下设计:
*/

///: Filename: Insert.java
public class Insert {
public static void main(String[] args) {
int[] i = {5,6,7,44,55,89,};//原来的数组
int x = 24;//要插入的数据
System.out.print("插入前数据: ");
print(i);
i=insert(i,x);
System.out.print("插入["+x+"]后数据: ");
print(i);
}
/**遍历并打印出数组中的数据*/
private static void print(int[] a){
for(int i=0; i<a.length; i++)
System.out.print(a[i]+", ");
System.out.println();//换行
}
/**插入数据并重新排序的方法*/
private static int[] insert(int[] a,int in){
int[] copy = new int[a.length+1];//新建一个临时数组,长度比原数要大1
copy[0]=in;//先将要插入的数据放入第一单元格
//原来数组中的数复制过来,存在第二格为开始的单元格中
for(int i=0; i<a.length; i++)
copy[i+1]=a[i];
//对临时数组重新排序
for(int i=0; i<copy.length-1; i++)
//如果前一数据大于后一数据,就进行交换.
if(copy[i]>copy[i+1]){
copy[i]+=copy[i+1];
copy[i+1]=copy[i]-copy[i+1];
copy[i]-=copy[i+1];
i-=i==0?1:2;//逐级上溯
}
//返回临时数组,任务完成
return copy;
}
}
///:~END
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-11-01
首先 告诉你在“数组”中插入数据的可能行为“0”,看看数据结构就知道怎么回事了。唯一的可能性就是找到那个数相应的位置然后重新建立数组将数据插入到新的数组。
第2个回答  2008-11-03
0079007用的是动态数组,如果你只需要输入一个数的话可以用一般的数组:

// Sort.java:
public class Sort
{
public static void main(String args[])
{
int one[]; // 你已经排好序的数组
int two[] = new int[one.length+1]; // 新的数组,维数比one多一
System.arraycopy(one, 0, one.length, two, 0); // 复制数组one到two,起始位置为0
two[two.length-1] = 1000; // 输入一个数,放在two的最后。
paixu(two); // 用你的排序算法给新数组two排序。
}
}
相似回答