// 线性表(a1,a2,a3,...an)中的元素递增有序且按顺序存储与计算机内。要求设计一个算法,完成用最少时间在表中查找数值为x的元素,若找到,则将其与后继元素位置相交换,若找不到,则将其插入表中并使表中元素仍递增有序。
void searchAndExchangeElement(int arr[], int n, int x) {
int left = 0, right = n - 1, mid;
while (left <= right) {
mid = (left + right) / 2;
if (arr[mid] == x) break;
if (arr[mid] > x) right = mid - 1;
else left = mid + 1;
}
printf("left: %d\nright: %d\nmid:%d\ntarget:%d\n", left, right, mid,arr[mid]);
//当找着元素,与交换后一个元素
if (arr[mid] == x && mid!=n-1) {
int temp = arr[mid];
arr[mid] = arr[mid + 1];
arr[mid + 1] = temp;
}
// 若没找到,则与插入表中并保持表的递增
if (left > right) {
int i;
for (i = n - 1;i > right;i--) arr[i + 1] = arr[i];
arr[i + 1] = x;
}
}
考研数据结构代码题(搜索并与后继元素交换)
于 2024-08-28 22:19:45 首次发布