问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

1.已知顺序表L递增有序,编写一个算法,将X插入到线性表的适当位置上,以保持线性表的有序性

发布网友 发布时间:2022-05-11 21:45

我来回答

3个回答

热心网友 时间:2023-10-21 17:29

二路归并排序.下面这个算法是从网上找的.

1、算法基本思路
 设两个有序的子文件(相当于输入堆)放在同一向量中相邻的位置上:R[low..m],R[m+1..high],先将它们合并到一个局部的暂存向量R1(相当于输出堆)中,待合并完成后将R1复制回R[low..high]中。

(1)合并过程
 合并过程中,设置i,j和p三个指针,其初值分别指向这三个记录区的起始位置。合并时依次比较R[i]和R[j]的关键字,取关键字较小的记录复制到R1[p]中,然后将被复制记录的指针i或j加1,以及指向复制位置的指针p加1。
 重复这一过程直至两个输入的子文件有一个已全部复制完毕(不妨称其为空),此时将另一非空的子文件中剩余记录依次复制到R1中即可。

(2)动态申请R1
 实现时,R1是动态申请的,因为申请的空间可能很大,故须加入申请空间是否成功的处理。

2、归并算法
void Merge(SeqList R,int low,int m,int high)
{//将两个有序的子文件R[low..m)和R[m+1..high]归并成一个有序的
//子文件R[low..high]
int i=low,j=m+1,p=0; //置初始值
RecType *R1; //R1是局部向量,若p定义为此类型指针速度更快
R1=(ReeType *)malloc((high-low+1)*sizeof(RecType));
if(! R1) //申请空间失败
Error("Insufficient memory available!");
while(i<=m&&j<=high) //两子文件非空时取其小者输出到R1[p]上
R1[p++]=(R[i].key<=R[j].key)?R[i++]:R[j++];
while(i<=m) //若第1个子文件非空,则复制剩余记录到R1中
R1[p++]=R[i++];
while(j<=high) //若第2个子文件非空,则复制剩余记录到R1中
R1[p++]=R[j++];
for(p=0,i=low;i<=high;p++,i++)
R[i]=R1[p];//归并完成后将结果复制回R[low..high]
} //Merge ..

热心网友 时间:2023-10-21 17:29

将X在有序表二分查找,找到X要在有序表里要插入的位置,进行移位操作即可。
// 将一个数X插入一个依次递增的有序表里,并返回新生成的数组
public static int[] Insert(int x, int[] a) {
int[] temp = new int[a.length + 1];
for (int i = 0; i < a.length; i++) {
temp[i] = a[i];
}

int low, high, mid;
low = 0;
high = a.length - 1;

while (high - low > 1) {
mid = (low + high) / 2;
if (x == a[mid])
break;
else if (x < a[mid]) {
high = mid;
} else if (x > a[mid]) {
low = mid;
}
}
int j;
for (j = temp.length - 1; j > low; j--) {
temp[j] = temp[j - 1];
}
temp[j + 1] = x;
return temp;

}

热心网友 时间:2023-10-21 17:30

int Linser(SeqList *L,int X)
{ int i=0,k;
if(L->last>=MAXSIZE-1)
{ printf(“表已满无法插入”);
return(0);
}
while(i<=L->last&&L->elem[i]<X)
i++;
for(k=L->last;k>=I;k--)
L->elem[k+1]=L->elem[k];
L->elem[i]=X;
L->last++;
return(1);
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
干货| 如何利用PPT绘制手绘图像(内含视频教学)。 小米Mix2s开发者选项的设置与应用指南(探索小米Mix2s开发者选项)_百度... 我今年41岁女,我想问一买哪种养老保险更合算,可以一次买吗?要多少... 我们家有营业执照。我现在41岁了。养老保险如何来买?一年,交多少钱? 搅拌桩的两喷两搅怎么理解 ...上关于一喷二搅、二喷二搅、二喷三搅、二喷四搅的具体做法 两搅两喷与四搅四喷的区别 三轴搅拌桩两搅四喷是什么意思 梦幻西游将军令怎么解绑 EXCEL表,求值? 设顺序表L中的数据元素递增有序,试编写算法删除表中所有大于k1而小于k2的元素(k1&lt;k2)。 程序纠错 已知顺序表L递增有序,编写一个算法,将X插入到线性表的适当位置上,以保证线性表的有序性。 已知顺序表L为按值递增有序的,编写算法将数据元素e插入到顺序表L中,使之仍有序。 2、编写算法删除 设顺序表L中的元素递增有序。试写一算法,将数据元素x插入到顺序表L的适当位置,以保持该表的有序性。 百度地图怎么创建自己的位置店名 淘宝店铺名字的位置怎么设置,比如说居中或者让它在右边显示?真心希望好心人回答。 微信好友被删了,自己又不知道他的了。怎么找回? 微信好友被删了,自己又不知道他的了。怎么找回? 河南普通专升本报名费多少钱(不是成教自考) 就是专科升本科? 哪位大神知道在河南新乡,专升本的报考费需要多少钱? 巴金和冰心被称为什么 巴金的繁星和冰心的繁星有什么相同和什么相同。 冰心奶奶和巴金爷爷的关系? 巴金的《繁星》和冰心《繁星》有什么区别? 怎样为老人写遗嘱,需要哪些手续? 老人去公正处立遗嘱还需要单位证明或是档案吗? 老年人办遗嘱公证该带哪些东西? 遗嘱继承需要什么手续 老人去公证处立遗嘱需要什么手续 老人立遗嘱要什么程序 数据结构的一道题目:已知顺序表La中的数据元素递增有序.把X插入到La中,使La中结点仍然保持递增有序 已知一个按元素递增排列的顺序表L,试编写一个算法将值为value的元素插入L中,且保持准许表任然有效 设顺序表L中数组元素递增有序,写一算法,将X插入到顺序表的适当位置 假设顺序表L中的元素递增有序,设计算法在顺序表中插入元素x,要求插入后仍保持其递增有序特性,并要求时 数据结构:已知线性表中的元素以值递增有序排列,删除表中所有值大于mink且小于maxk的元素 设顺序表L中的数据元素递增有序,试写一算法,在该表的适当位置插入新元素x并保持 关于数据结构(C语言版)的问题 在vc中 设顺序表L中的元素递增有序。试写一算法,将e插入到顺序表的适当位置。 能给一个方法和思想吗? 已知线性表中的元素(整数)以值递增有序排列,并以单链表作存储结构。试编写一个高效算法,删除表中所有 C语言。已知线性表中的元素以值递增有序排列,并以单链表作存储结构.写一高效算法,删除 C语言,已知线性表中的元素以值递增有序排列,并以单链表作存储结构,高效算法怎么算? 一个顺序表元素值有序递增,编写算法,删除顺序表中值相同的多余元素. 平安保险鸿运随行中途退保,保费怎能返还 平安保险鸿运可以退吗 我买的平安鸿运安行保险,每个月交946元,现在交了25个月,如果我想退保,我现在能得到多少钱? 婚后买房,一个人办按揭行不行?? 婚后按揭买房财产债务怎么分割 结婚后能以个人名义按揭买房吗 婚后以个人名义买房贷款也是个人还,如果离婚财产怎么算? 婚后可以一个人贷款买房吗 婚后如何个人贷款买房