注意:该问题最初标记为C++.原始答案仅适用于C++,但我提供了遵循相同原则的C解决方案.
我们的想法是将表示开始的一对指针和一个超出范围结束的指针传递给函数,并返回指向最小元素的指针.
int* min_element(int *start, int *end)
{
if (start == end) return end;
int *min = start++;
for (; start != end; ++start)
if (*start < *min) min = start;
return min;
}
Run Code Online (Sandbox Code Playgroud)
用法:
int data[] = {1, 5, 3, 66, 4, 81, 23, 2, 6};
int * min = min_element(data, data + 9);
if (min != data + 9)
{
// range was not empty, min value is *min
}
Run Code Online (Sandbox Code Playgroud)
原始C++答案
有std::min_element一个迭代器,它给出了一对迭代器指定范围内的最小元素的迭代器.
int arr[] = { 3,1,6,8,9,34,17,4,8};
auto it = std::min_element(std::begin(arr), std::end(arr));
Run Code Online (Sandbox Code Playgroud)
编辑2:从删除的答案中,C++ 11有一个std::min过载,需要一个initializer_list,所以你可以说
auto minval = std::min({a, b, c, x, y, z});
Run Code Online (Sandbox Code Playgroud)
其中a,b,c等都是一种类型的配套operator<.
老式的方式......
int arr[] = { 1, 3, 6, 100, 50, 72 };
int min_array( int arr[], int len )
{
int min = arr[0];
for ( int i = 1; i < len; i++ )
if ( arr[i] < min )
min = arr[i];
return min;
}
Run Code Online (Sandbox Code Playgroud)