8.元素递增有序线性表最少时间查数值为x的值,若找到则与后继元素交换,若找不到则将x插入表中并使表仍有序.
void find(sqlist1 &L1,int x) {//二分查找 if(L1.length1!=0) { int l=0;int r=L1.length1-1;int mid; while(l<=r) { mid=(r+l)/2; if(L1.data[mid]<x)l=mid+1; else if(L1.data[mid]>x) r=mid-1; else if(L1.data[mid]==x) { if(mid==L1.length1-1){cout<<"x为最后一位,无后继元素与其交换"; break;} else { L1.data[mid]=L1.data[mid+1]; L1.data[mid+1]=x; } } } if(l>r)//找不到x eg:1 2 4 6 9 x=7,此时l=4,r=3,mid=3,指向6 { mid=(l+r)/2;//l>r,因为向下取整,仍未靠左侧的位置 for(int i=L1.length1;i>mid+1;i--) { L1.data[i]=L1.data[i-1]; } L1.length1++; L1.data[mid+1]=x; } out1(L1); } }
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交