已知顺序表L递增有序,编写一个算法,将X插入到线性表的适当位置上,以保持线性表的有序性。
3个回答
展开全部
二路归并排序的算法是从网上找的。
算法的基本思想
设置两个有序的子文件(相当于输入堆)相同的向量相邻的位置上:R [低。。米]中,R [m +1个..高]首先将它们合并到一个本地临时向量R1(相当于输出的堆),待合并完成后,将R1复制回R [低。。高]。
(1)合并
合并过程中,I,J和p指针到它的初始值,分别指向三个记录的起始位置。订单合并比较R [I]和R [J]的关键字,以较小的记录复制到R1 [对],然后将其复制到i或j递增1的记录指针的关键字,并且位置指示复制指针八方1。
重复这个过程,直到进入子文件中,有一份所有剩下的记录在另一个非空的子文件夹,依次复制到R1可以的成品(不妨把它称为空)。
(2)动态应用R1
实现,R1是一个动态的应用程序,因为应用程序空间可以大,从而成功应该被添加到加工的应用空间。
2,合并算法
无效合并(SeqList R INT低,INT米,高)
{/ /两个有序的子文件R [低。米)和R [m +1个..高]合并成一个有序
/ /子文件R [低。。高
INT I =低,J = M +1,P = 0; / /设置初始值
RecType * R1; / / R1是局部向量,P是指这类型的指针快
R1 =(ReeType *)malloc的((高 - 低+1)* sizeof(RecType)的);
(R1)/ /应用程序的空间
错误(“内存不足失败!“);
在while(I <= M&J <; =高)/ /两个子文件非空,以较低者为准输出R1 [P]
R1 [P + + ] =(R [I]键<= R [J]键)? R [我+ +]:R [J + +];
(I <= M)/ /如果第一个子文件非空,将剩余的记录到在
R1中R1 [ P-+ +] = R [I + +];
(J <=高)/ / 2子文件非空,则复制剩余记录到R1
R1 [P + +] = ?[J + +];
为(P = 0,I =低; <=??高,P + +,+ +)
R [I] = R1 [P] ;/ /合并完成结果将被复制回R [低。。高
} / /合并..
算法的基本思想
设置两个有序的子文件(相当于输入堆)相同的向量相邻的位置上:R [低。。米]中,R [m +1个..高]首先将它们合并到一个本地临时向量R1(相当于输出的堆),待合并完成后,将R1复制回R [低。。高]。
(1)合并
合并过程中,I,J和p指针到它的初始值,分别指向三个记录的起始位置。订单合并比较R [I]和R [J]的关键字,以较小的记录复制到R1 [对],然后将其复制到i或j递增1的记录指针的关键字,并且位置指示复制指针八方1。
重复这个过程,直到进入子文件中,有一份所有剩下的记录在另一个非空的子文件夹,依次复制到R1可以的成品(不妨把它称为空)。
(2)动态应用R1
实现,R1是一个动态的应用程序,因为应用程序空间可以大,从而成功应该被添加到加工的应用空间。
2,合并算法
无效合并(SeqList R INT低,INT米,高)
{/ /两个有序的子文件R [低。米)和R [m +1个..高]合并成一个有序
/ /子文件R [低。。高
INT I =低,J = M +1,P = 0; / /设置初始值
RecType * R1; / / R1是局部向量,P是指这类型的指针快
R1 =(ReeType *)malloc的((高 - 低+1)* sizeof(RecType)的);
(R1)/ /应用程序的空间
错误(“内存不足失败!“);
在while(I <= M&J <; =高)/ /两个子文件非空,以较低者为准输出R1 [P]
R1 [P + + ] =(R [I]键<= R [J]键)? R [我+ +]:R [J + +];
(I <= M)/ /如果第一个子文件非空,将剩余的记录到在
R1中R1 [ P-+ +] = R [I + +];
(J <=高)/ / 2子文件非空,则复制剩余记录到R1
R1 [P + +] = ?[J + +];
为(P = 0,I =低; <=??高,P + +,+ +)
R [I] = R1 [P] ;/ /合并完成结果将被复制回R [低。。高
} / /合并..
2013-03-28
展开全部
struct sqlist
{int elem[maxsize] ;<br> int length;<br> <br>}sqlist;
Status Insert_SqList(SqList &va,int x)
{
if(va.length+1>maxsize) return 0;
va.length++;
for(i=va.length-1;va.elem[i]>x&&i>=0;i--)
va.elem[i+1]=va.elem[i];
va.elem[i+1]=x;
return 1;
}
{int elem[maxsize] ;<br> int length;<br> <br>}sqlist;
Status Insert_SqList(SqList &va,int x)
{
if(va.length+1>maxsize) return 0;
va.length++;
for(i=va.length-1;va.elem[i]>x&&i>=0;i--)
va.elem[i+1]=va.elem[i];
va.elem[i+1]=x;
return 1;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-03-28
展开全部
从head开始,如果小于等于当前节点的值,插入,否则 p = p->next; 进入下一个节点,重复前面,直到完成插入
sigh~
sigh~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询