观察下面的算法,此算法完成如下功能:在非递减有序表中删除所有值为X的元素。问:如何改进此算法,使得算法效率提高?
void Deletaz(ElemType x)
{ int i=0,j;
while (i<length&& elem[i]<x) i++;
if(i==length) cout<<”X不存在”<<endl;
else{ while(elem[i]==x)
{ for(j=I;j<length;j++) elem[j]=elem[j+1];
length--;
}
}
}
求求哪位高手帮帮我!本人刚刚学数据结构啊!!
观察下面的算法,此算法完成如下功能:在非递减有序表中删除所有值为X的元素
答案:2 悬赏:0 手机版
解决时间 2021-05-16 04:18
- 提问者网友:雨不眠的下
- 2021-05-15 23:16
最佳答案
- 五星知识达人网友:空山清雨
- 2021-05-15 23:25
2的指数折半查找只要用Log2 N次就够了 如果8个元素只要查找 3次,不用你上面的方法查找8次.
删除后把后面的几个往前拖,也可以用指针,这样还要快,删除指针链接一下就OK
int checkX(ElemType x,int &i) {
int left=0,right=length;
i=length/2;
if(x>elem[i]){
right=i;
}else {
left=i;
}
i=(left+right)/2;
}
if((left==right)&& (x!=elem[i]))
cout<<”X不存在”<<endl;
break;
}
删除后把后面的几个往前拖,也可以用指针,这样还要快,删除指针链接一下就OK
int checkX(ElemType x,int &i) {
int left=0,right=length;
i=length/2;
if(x>elem[i]){
right=i;
}else {
left=i;
}
i=(left+right)/2;
}
if((left==right)&& (x!=elem[i]))
cout<<”X不存在”<<endl;
break;
}
全部回答
- 1楼网友:琴狂剑也妄
- 2021-05-16 00:31
楼上的算法是改进了,不过同样忽略了一种情况:==X的元素不止1个的时候就有所遗漏了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯