思路:
类似二分查找,每次取中间的在数字,以此为分隔,判断两边的数组哪个是有序的,分析题意可知最小的数字定在无序的一端,在此端的数组内继续查找。
#include<stdio.h>
int potition(int arr[], int left, int right)
{
int key = left+right/2;
if(arr[key] > arr[right])
return potition(&arr[key], key, right);
else if(arr[key] < arr[left])
return potition(&arr[left], left, key);
else
return arr[left];
}
int main()
{
int arr[] = {6,7,8,9,1,2,3,4,5};
int tmp = potition(arr,0,sizeof(arr)/sizeof(int)-1);
printf("%d\n",tmp);
return 0;
}