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;
}