2.2.3-9
线性表(a1,a2,...,an)中元素递增有序且按顺序存储在计算机内。要求设计一算法,完成最少时间在表中查找数值为x的元素,若找到则将其与后继元素位置相互换,若找不到则将其插入表中并使表中元素扔递增有序
思路:因为表中元素递增且有序,要求最短时间完成查找,因此选择折半查找法。当查找到元素后,将其与后继元素交换,若未找到,此时应将其插入在高位(high)之后
//折半查找 void FindElem(SqList &L,int x){ //低位,高位,中位 int low=0,high=L.length-1,mid; while(low<=high){ mid = (low+high)/2; if(L.data[mid]==x)break; else if(L.data[mid]<x) low = mid+1; else high = mid-1; } //找到元素 //交换元素 if(L.data[mid]==x && mid!=L.length-1){ int t = L.data[mid]; L.data[mid] = L.data[mid+1]; L.data[mid+1] = t; } //未找到元素,插入 if(low > high){ for(int i=L.length-1;i>high,i--){ L.data[i+1] = L.data[i]; } L.data[i+1]=x; } }

浙公网安备 33010602011771号