最短时间则采用折半查找
#include <stdio.h>
int n, A[]= { 1,2,3,4,5,16 };
void Sei(int A[], int x) {
int low = 0, high = n - 1, mid; //low和high分别指向线性表的上界和下界
while (low <= high)
{
mid = (low + high) / 2; //中间位置
if (A[mid] == x) //找到退出循环
break;
else if (A[mid] < x) //在右边查找
low = mid + 1;
else //在左边查找
high = mid - 1;
}
if (A[mid] == x && mid != n - 1) //找到且不是最后一个元素与其后面元素交换位置
{
int t;
t = A[mid];
A[mid] = A[mid + 1];
A[mid + 1] = t;
}
if (low > high) //没有找到,插入元素
{
int i;
n = n + 1;
for (i = n - 1; i > high; i--) //元素后移
{
A[i + 1] = A[i];
}
//表长增加1
A[i + 1] = x; //插入元素
}
}
int main()
{
n = sizeof(A) / sizeof(int);
int x =20;
Sei(A, x);
for (int j = 0; j < n; j++)
{
printf("%d\n", A[j]);
}
}