剑指offer-旋转数组的最小数字

来源:互联网 发布:编程谜题 pdf 编辑:程序博客网 时间:2024/05/28 16:00

旋转数组的最小数字



                                          

                                          

                                          
                                                                                     
                                               


#include <stdio.h>int MinInOrder(int* numbers,int index1,int index2){int result=numbers[index1];for(int i=index1+1;i<=index2;++i){if(result>numbers[i]){result=numbers[i];}}return result;}int Min(int* numbers,int length){if(numbers==NULL||length<=0){printf("Invalid parameters");}int index1=0;int index2=length-1;int indexMid=index1;while(numbers[index1]>=numbers[index2]){if(index2-index1==1){indexMid=index2;break;}indexMid=(index1+index2)/2;if(numbers[index1]==numbers[index2]&&numbers[indexMid]==numbers[index1]){return MinInOrder(numbers,index1,index2);}if(numbers[indexMid]>=numbers[index1]){index1=indexMid;}else if(numbers[indexMid]<=numbers[index2]){index2=indexMid;}}return numbers[indexMid];}int main(){   int numbers[]={3,4,5,1,2};   int val=Min(numbers,5);   printf("%d",val);   return 0;} 


                                               
                                               





      二分查找C语言代码如下:

#include <stdio.h>#include <stdlib.h>int BinarySearch(int* numbers,int start,int end,int val){if(numbers==NULL||start>end){   printf("Invalid parameters\n");         exit(-1);} if(start>end){printf("查无此数\n");         exit(-1);}int mid=(start+end)/2;if(numbers[mid]==val){return mid;}else if(numbers[mid]>val){return BinarySearch(numbers,start,mid-1,val);}else if(numbers[mid]<val){return BinarySearch(numbers,mid+1,end,val);}}int main(){int numbers[]={1,2,4,6,9,33,77,99};int index=BinarySearch(numbers,0,7,6);printf("找到了,该数的下标为:%d",index);return 0;}





0 0
原创粉丝点击