您的位置:首页 > 其它

旋转数组的最小数字

2016-10-16 21:39 162 查看
代码:

#include <iostream>

using namespace std;

int MinInOrder(int num[], int index1, int index2)
{
int min_num = num[index1];
while (index1 < index2)
{
++index1;
if (min_num > num[index1])
min_num = num[index1];
}

return min_num;
}

int Min(int num[], int length)
{
if (num == nullptr || length <= 0)
throw new exception("Invalid Exception");
int index1 = 0;
int index2 = length - 1;
int indexMid = index1;

while (num[index1] >= num[index2])
{
if (index2 - index1 == 1)
{
indexMid = index2;
break;
}
indexMid = (index1 + index2) / 2;

if (num[index1] == num[index2] && num[indexMid] == num[index1]) //只能顺序查找
return MinInOrder(num, index1, index2);

if (num[indexMid] >= index2)    //中间值处在前一个子递增数组中
{
index1 = indexMid;
}
else                           //中间值处在前一个子递增数组中
{
index2 = indexMid;
}
}

return num[indexMid];
}

int main()
{

int num[] = { 3, 4, 5, 1, 2 };
int num2[] = { 1, 0, 1, 1, 1 };
int num3[] = { 1, 1, 1, 0, 1 };

int length = sizeof(num) / sizeof(int);
int length2 = sizeof(num2) / sizeof(int);
int length3 = sizeof(num3) / sizeof(int);

cout<<Min(num, length)<<" ";
cout << Min(num2, length2) << " ";
cout << Min(num3, length3) << " ";

cout << endl;
system("pause");
return 0;
}


测试:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: