求下面问题的完整代码。

【问题描述】线性表{a1,a2,...,an}中元素递增有序且按顺序存储于计算机内,要求设计一个算法完成以下功能:
(1)用最少的时间在表中查找到值为x的元素;
(2)若找到将其与后继元素位置相交换;
(3)若找不到将其插入表中并保持原表的有序性。
【输入形式】n a1 a2 ... an (说明:先输入线性表的长度n,之后输入n 个整数,数值递增有序,数值之间以空格分隔)       
x(说明:输入被查元素x)
【输出形式】如果x找到,与后继元素交换后显示线性表,显示结果以空格作为分隔;
         如果x找不到,插入到线性表中合适的位置并显示线性表,显示结果以空格作为分隔。
【样例输入】5 1 2 3 4 5
          2
【样例输出】1 3 2 4 5
【样例输入】5 1 2 4 5 6
          3
【样例输出】1 2 3 4 5 6

查找可以用二分法

#include <stdio.h>

typedef struct _sqlist
{
    int data[1000];
    int len;
}sqlist;

void insert(sqlist *sq,int m)
{
    int i=0;
    for(i=0;i<sq->len;i++)
    {
        if(m < sq->data[i])
        {
            for(int j=sq->len;j>i;j--)
                sq->data[j] = sq->data[j-1];
            sq->data[i] = m;
            break;
        }
    }
    if(i==sq->len)
        sq->data[sq->len] = m;
    sq->len++;
}
int search(sqlist *sq,int m)
{
    int start = 0,end = sq->len-1;
    while(start <= end)
    {
        int mid = (start+end)/2;
        if(sq->data[mid] == m)
            return mid;
        if(sq->data[mid] < m)
            start = mid + 1;
        else
            end = mid - 1;
    }
    return -1;
}


int main()
{
    sqlist sq;
    scanf("%d",&sq.len);
    for(int i=0;i<sq.len;i++)
        scanf("%d",&sq.data[i]);
    int x;
    scanf("%d",&x);
    int idx = search(&sq,x);
    if(idx >= 0)
    {
        if(idx < sq.len-1)
        {
            int t = sq.data[idx];
            sq.data[idx] = sq.data[idx+1];
            sq.data[idx+1] = t;
        }
    }
    else
        insert(&sq,x);
   
    for(int i=0;i<sq.len;i++)
        printf("%d ",sq.data[i]);
    return 0;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632