知道自己不足,才能进步!
今天太慌了,设备临时出现状况。第一次这么近接触,心里太紧张了,感觉自己肯定打上的,怎么就懵了。
现在把问题整理下
一个数组,它是在一个有序的数组下,循环移位得到的,但循环多少位不知道,查找里面的一个元素,要做到效率最低;
有思路了,也是二分查找,但是要变形!!!
#include <stdio.h>
/*
思路:将数组方成两段 前一段,后一段 ,之后再利用二分查找
*/
int binarySearch(int low1,int high1,int* a,int k)
{
int mid1;
while(low1<=high1)
{
mid1=(low1+high1)/2;
if(k == a[mid1])
{
printf("5---%d\n",mid1);
return mid1;
}
else if(k<a[mid1]) high1 = mid1-1;
else
low1= mid1+1;
}
}
int func(int low,int high,int*a,int k)
{
int low1,high1,mid1;
int mid;
mid = (low+high)/2;
if(k == a[mid])
{
printf("1--%d\n",mid);
return mid;
}
if(k == a[low])
{
printf("2-- %d\n",low);
return low;
}
if(k == a[high])
{
printf("3--%d\n",high);
return high;
}
if(k<a[mid] && k<a[low]) //11111
{
func(low,mid,a,k);
return;
}
if(k>a[mid] && k>a[high]) //2222
{
func(mid,high,a,k);
return;
}
if(k>a[mid] && k>a[low] && k>a[high] && ((k-a[mid]) > (k -a[low]))) //11111
{
func(low,mid,a,k);
return;
}
if(k>a[mid] && k>a[high] && k>a[low] && ((k-a[mid]) < (k -a[low]))) //22222
{
func(mid,high,a,k);
return;
}
if(k<a[mid] && k>=a[low] && k>a[high]) //1111
{
binarySearch(low,mid,a,k);
}
if(k>a[mid] && k<=a[high] && k<a[low]) //22222
{
binarySearch(mid,high,a,k);
}
return 0;
}
int main()
{
//int a[8] = {13,14,15,16,1,2,3,4}; //14, 2
//int a[8] = {14,15,16,2,3,4,6,7};
//int a[8] = {11,12,13,14,15,17,19,7};
//int a[8] = {11,1,3,4,5,7,9,10};
//int a[8] = {1,3,4,5,7,9,10,0};
int n = sizeof(a)/sizeof(a[0]);
int k;
printf("input k : ");
scanf("%d",&k);
func(0,n-1,a,k);
}