题目
线性表(a1,a2,…,an)中的元素递增有序且按顺序存储与数组计算机的数组a内,要求涉及算法用函数实现下列功能:
- 用最少的时间在表中查找值为x的元素;
- 如找到则将其与直接后继元素交换;
- 如找不到则将其插入线性表使表中元素仍然递增有序。
代码
这是一道不知道哪里的算法题。查找算法应该采用二分查找法。
#include <stdio.h>
#include <stdlib.h>
void f(int a[], int x, int n)
{
//a为数组,x为比较目标,n为线性表长度
int low = 0;
int high = n - 1;
int mid;
while(low < high){
mid = (low + high) / 2;
if(a[mid] == x){
//找到x,将其与直接后继元素交换
if(mid == n - 1){return ;} //x为最后一个元素,没有直接后继
a[mid] = a[mid + 1];
a[mid + 1] = x;
return ;
}
else if(a[mid] < x)
low = mid + 1;
else high = mid - 1;
}
int i = n - 1;
while(a[i] > x){
a[i + 1] = a[i];
i --;
}
a[i + 1] = x;
return;
}
总结
这个代码有一定的问题,但是大体能符合要求。在测试时会有一点麻烦。