永发信息网

在一个已排序的数组里如何插入新数据项?

答案:3  悬赏:40  手机版
解决时间 2021-04-09 21:00
  • 提问者网友:原来太熟悉了会陌生
  • 2021-04-09 02:04
在一个已经排序的数组里,在合适的位置增加一个数据项,其他元素按顺序往后排。
如何写?语言:java.
最佳答案
  • 五星知识达人网友:第四晚心情
  • 2021-04-09 03:06
#include<stdio.h>

int main()
{
int n=9;//数组元素个数
int a[10]=;

//开始两分查找
int i,j,mid,insert=5;
i=0; j=n-1;
while(i<=j){
mid=(i+j)/2;
if(a[mid]>insert)
j=mid-1;
else if(a[mid]<insert)
i=mid+1;
else//a[mid]==inset,数据重复
return 0;
}
//两分查找结束
//此时a[j]<insert<a[i],i-j=1

//把元素a[i...n-1]往后移
for(j=n;j>=i;j--)
a[j]=a[j-1];
//插入insert
a[i]=insert;
//调整元素个数
n++;

//输出
for(i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}

其它补充:
(1)因为这是数组,数组插入元素时必须移动从插入位置往后所有的元素,所以用两分法一点也不高效。想高效地用两分法插入应该使用二叉树。
(2)高效地往已排序的数组中插入元素应该直接从后往前一边比较一边移边。
(3)程序中的两分查找非常有用,如果不会,一定要掌握。尤其要了解当跳出while循环时i,j值的含义,这样才能应对各种使用上的变化。
(4)本程序中,如果把insert改成-1或10,同样可以运行。
全部回答
  • 1楼网友:醉吻情书
  • 2021-04-09 06:09
标准做法是使用适合插入的数据结构,比如链表或者二叉树,这样插入的效率最高。Java Collection有LinkedList链表类。如果java没有内置这些工具,比如树,就要自己先实现。 如果强行在普通[]数组中插入是很少见,算比较不地道的做法: 用复制的办法,复制前段数据,复制插入项,再复制后段数据。
  • 2楼网友:夜余生
  • 2021-04-09 04:43
标准做法是使用适合插入的数据结构,比如链表或者二叉树,这样插入的效率最高。Java Collection有LinkedList链表类。如果java没有内置这些工具,比如树,就要自己先实现。 如果强行在普通[]数组中插入是很少见,算比较不地道的做法: 用复制的办法,复制前段数据,复制插入项,再复制后段数据。 再看看别人怎么说的。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯