int main()
{
int n=9//数组元素个数
int a[10]=
//开始两分查找
int i,j,mid,insert=5
i=0j=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=nj>=ij--)
a[j]=a[j-1]
//插入insert
a[i]=insert
//调整元素个数
n++
//输出
for(i=0i<ni++)
printf("%d ",a[i])
return 0
}
其它补充:
(1)因为这是数组,数组插入元素时必须移动从插入位置往后所有的元素,所以用两分法一点也不高效。想高效地用两分法插入应该使用二叉树。
(2)高效地往已排序的数组中插入元素应该直接从后往前一边比较一边移边。
(3)程序中的两分查找非常有用,如果不会,一定要掌握。尤其要了解当跳出while循环时i,j值的含义,这样才能应对各种使用上的变化。
(4)本程序中,如果把insert改成-1或10,同样可以运行。
首先,将表1和表2按照人名进行排序,以便将它们对应起来。这可以使用Excel或其他电子表格软件的排序功能来完成。
创建一个新的电子表格,并在其中添加表头,包括姓名、最新学号和最新住址。
在新的电子表格中,使用VLOOKUP函数将表1中的每个人名与表2中的最新学号和最新住址进行匹配。具体来说,VLOOKUP函数将在表2中查找每个人名,并返回该人名对应的最新学号和最新住址。例如,可以使用以下公式:=VLOOKUP(A2, Table2, 2, FALSE) 来查找每个人名对应的最新学号。
将VLOOKUP函数应用到整个电子表格中,以获取每个人名对应的最新学号和最新住址。
最后,将新的电子表格另存为一个新的文件,以保存更新后的信息。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)