线性表(a1,a2,···,an)中的元素递增有序且按顺序存储于计算机内。要求设计一个算法,完成用最少时间在表中查找数值为x的元素,若找到,则将其与后继元素位置相交换,若找不到,则将其插入表中并使表中元素仍递增有序。
思路:因为题目要求用最少的时间,所以考虑二分查找。
int Search(SeqList& L, int x, int low, int high) {
int t;
int min;
while (low < high) {
mid = (low + high) / 2;
if (x > L.data[mid]) {
low = mid + 1;
}
else if (x < L.data[mid]) {
high = high - 1;
}
else if (x == L.data[mid]) { //找到,退出循环
break;
}
}
if (x == L.data[mid] && mid != L.length - 1) { //找到,与后继元素位置相交换(注意要满足两个条件)
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; //插入x
}
}