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;
    }
}

 

posted @ 2019-05-30 16:08  青墨  阅读(179)  评论(0)    收藏  举报