话不多上,贴代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int OptimizationOrder_search(int *a,int n,int key){ //优化版顺序查找
int i;
a[0]=key;
i=n;
while(a[i]!=key){
i--;
}
return i; //返回0说明查找失败
}
//int sort(int *a,int n){ //二分前的排序(希尔排序)
// int i,j,d;
// d=n/2;
// while(d>0){
// for(i=d;i<=n;i++){
// a[0]=a[i];
// j=i-d;
// while(j>=0 && a[0]<a[j]){
// a[j+d]=a[j];
// j=j-d;
// }
// a[j+d]=a[0];
// j=j-d;
// }
// d=d/2;
// }
//}
int BinarySearch(int *a ,int n, int key){ //折半查找(二分)
int low,high,mid;
low=1; //最低下标
high=n; //最高下标
while(low<=high){
mid=(low+high)/2; //二分
if(key<a[mid]){
high=mid-1;
}else if(key>a[mid]){
low=mid+1;
}else{
return mid;
}
}
return 0;
}
int main(){
int *a,i,n,key;
scanf("%d",&n);
a=(int *)malloc((n+1)*sizeof(int));
for(i=1;i<=n;i++){
scanf("%d",&a[i]);
}
// sort(a,n);
printf("need search key\n");
scanf("%d",&key);
int judge = OptimizationOrder_search(a,n,key);
if(judge){
printf("success!The key is %d\n",judge);
}else{
printf("fail!\n");
}
int JudgeOne=BinarySearch(a ,n,key);
if(JudgeOne){
printf("success!The key is %d\n",JudgeOne);
}else{
printf("fail!\n");
}
return 0;
}