顺序表第九题(折半查找指定元素)

9.线性表(a1,a2,a3,.......,an)中的元素递增有序且按顺序存储于计算机内,

要求设计一算法,完成用最少时间在表中查找数值为x的元素,

若自己找到则将其与后继元素相交换,若找不到则将其插入表中并使表中元素仍递增有序。

思路:

        1           3          5       6          9            12             45             78

代码:

#define_CRT_SECURE_NO_WARNINGS

#include<stdio.h>

#include<stdlib.h>

int findX(int *arr,int len,int x){

       int   low=0,high=len-1,mid;

        while(low<=high&&(mid=(low+high)/2)){

        if(x==*(arr+mid))          break;

        if(x<*(arr+mid)){

               high=mid-1;

        }

       else{

              low=mid+1;

             }

       }

        if(low>high){//未找到,插入

           int i;

            for(i=len-1;i>high:i--){

             *(arr+i+1)=*(arr+i);

              *(arr+i)=x;

             return   len+1;

             }

              else{//找到了,进行对调

          int tmp=*(arr+mid);

         *(arr+mid)=*(arr+mid+1);

         *(arr+mid+1)=tmp;

               return   len;

                 }

             }

}

int main(){

         int arr[10]={1,3,5,6,9,12,45,78};

          int x,len;

          printf("请输入要查找的元素:x=");

          scanf("%d",&x):
          len=findX(arr,8,x);

           for(int i=0;i<len;i++)       printf("%d ",*(arr+i));

           return  0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值