#include <stdio.h>
using namespace std;
#define Max 50
struct SqlList{
int data[Max]={2,4,6,8,9,10,12,13};
int length=8;
};
bool halfSelect(SqlList &s,int left,int right,int x){
if(left>=right){
return false;
}
int temp;
int mid=(left+right)/2;
if(s.data[mid]==x){
temp=s.data[mid];
s.data[mid]=s.data[mid+1];
s.data[mid+1]=temp;
return true;
}else if(s.data[mid]>x){
halfSelect(s,left,mid,x);
}else if(s.data[mid]<x){
halfSelect(s,mid+1,right,x);
}
}
void insert(SqlList &s,int x){
int temp;
for(int i=0;i<s.length;i++){
if(x>=s.data[i]&&x<=s.data[i+1]){//应该把x放在i后面的坐标中
for(int j=s.length;j>i;j--){
s.data[j]=s.data[j-1]; //因为我们的for循环是要找到 i之前的
}
s.data[i+1]=x;//等i前面的元素都往后移动完毕 把x放在i+1中
s.length=s.length+1;//这里再让length++,因为我们定义线性表长度为50,length只是一个遍历的常数
return;//循环完毕直接返回
}
}
}
int main(){
SqlList s;
printf("原来的线性表为:\n");
for(int i=0;i<s.length;i++){
printf("%d ",s.data[i]);
}
printf("\n");
int x=5;
if(halfSelect(s,0,s.length-1,x)==false){
printf("未找到匹配值\n");
insert(s,x);
printf("现在的线性表为:\n");
for(int i=0;i<s.length;i++){
printf("%d ",s.data[i]);
}
} else{
printf("找到相匹配的值:%d\n",x);
printf("现在的线性表为:\n");
for(int i=0;i<s.length;i++){
printf("%d ",s.data[i]);
}
}
}