繁体   English   中英

列出数组中的最小值和最大值

[英]List minimum and maximum value in array

我需要列出数组中的最小值和最大值。 例如,我有 10 个 arrays,所以我需要列出数组中的 5 个最小值和 5 个最大值。 我想让我的程序可以做到这一点.. 例子

{1.2, 3.5, 4.5, 8.9, 2.4, 6.5, 7.8, 3.3, 6.5, 9.5} {1.2 < 3.5, 4.5 < 8.9, 2.4 < 6.5, 7.8 < 3.3, 6.5 < 9.5}

如果数字小则赢 赢:1.2 4.5 2.4 3.3 6.5 输:3.5 8.9 6.5 7.8 9.5

我已经在代码中尝试了许多循环样式和 boolean。

#include <iostream>
using namespace std;

int main(){
    //double arr[2] = {1.2, 3.5};
    double arr[10] = {1.2, 3.5, 4.5, 8.9, 2.4, 6.5, 7.8, 3.3, 6.5, 9.5};
    double min = arr[0];
    double max = arr[0];
    double Sdata[5] = {0};
    double Bdata[5] = {0};
    int counterMin = 0;
    int counterMax = 0;

    for(int i = 1; i<10; i++){

        if(arr[i]<max || arr[i]> max){
            max = arr[i];
            if(counterMax<5){
                Bdata[counterMax] = max;
                counterMax++;
            }
            max = arr[i+1];
        }

        if(arr[i]<min || arr[i]> min){
            //min = arr[i];
            if(counterMin<5){
                Sdata[counterMin] = min;
                counterMin++;
            }
            min = arr[i+1];
        }



    }

    //Output
    cout<<"Minimum: "<<endl;
    for(int w = 0; w<5; w++){
        cout<<Sdata[w]<<" ";
    }

    cout<<endl;

    cout<<"Maximum: "<<endl;

    for(int j = 0; j<5; j++){
        cout<<Bdata[j]<<" ";
    }

    return 0;
}


Output from the program is:
Minimum:
1.2 4.5 2.4 7.8 6.5
Maximum:
3.5 8.9 6.5 3.3 9.5

I expect the output from the program is:
Minimum:
1.2 4.5 2.4 3.3 6.5
Maximum:
3.5 8.9 6.5 7.8 9.5

C++ 实际上提供了帮助您找到容器/数组中的最小和最大元素的算法:

#include <algorithm>
#include <iterator>
#include <iostream>

int main()
{
  const double arr[] = {1.2, 3.5, 4.5, 8.9, 2.4, 6.5, 7.8, 3.3, 6.5, 9.5};
  auto [min, max] = std::minmax_element(std::begin(arr), std::end(arr));
  std::cout << "Min: " << *min << "\n";
  std::cout << "Max: " << *max << "\n";
}

您可以使用std::min_element()std::max_element()以防您只需要其中一个。

首先,由于问题被标记为 C++,我认为您最好只使用std::vector而不是 arrays。
除此之外,如果您想对数组进行排序,您可以使用类似的东西。

#include <vector>

int main()
{
    std::vector<double> arr{1.2, 3.5, 4.5, 8.9, 2.4, 6.5, 7.8, 3.3, 6.5, 9.5};
    std::vector<double> maxs(arr.size()/2);
    std::vector<double> mins(arr.size()/2);
    double max, min;

    for (unsigned i = 0; i < arr.size()/2; ++i)
    {
        min = arr[2*i];
        max = arr[2*i + 1];

        if (min > max) std::swap(min, max);

        maxs[i] = max;
        mins[i] = min;
    }

    return 0;
}



这只是一个简单的片段,没有错误/绑定检查等......
您还可以检查您的原始向量是否包含偶数个元素,然后相应地打开 go 。

如果我没有正确理解某些内容或犯了任何错误,请随时纠正我!

我建议使用std::minmax_element 它不需要像使用std::min_elementstd::max_element的方法那样对数组进行两次迭代。

此外,我建议使用std::array而不是 POD C 数组

#include <algorithm>
#include <array>
#include <iterator>
#include <iostream>

int main() {
   std::array<double,10> arr {1.2, 3.5, 4.5, 8.9, 2.4, 6.5, 7.8, 3.3, 6.5, 9.5};
   const auto [min, max] = std::minmax_element(std::begin(arr), std::end(arr));
   std::cout << "min = " << *min << ", max = " << *max << '\n';
}

如果您要做的只是列出相邻数字的最小/最大对,那么只需要做以下事情:

#include <iostream>
#include <algorithm>

int main()
{
    double arr[10] = { 1.2, 3.5, 4.5, 8.9, 2.4, 6.5, 7.8, 3.3, 6.5, 9.5 };
    const int sz = (sizeof(arr) / sizeof(arr[0])); // number of elements
    const int outsize = sz / 2; // number of elements in output array 
    double Sdata[outsize] = { 0 };
    double Bdata[outsize] = { 0 };

    // loop for each pair
    for (int i = 0; i < sz - 1; i += 2) 
    {
            // minimum in Sdata, maximum in Bdata
        Sdata[i / 2] = std::min(arr[i], arr[i + 1]);
        Bdata[i / 2] = std::max(arr[i], arr[i + 1]);
    }

    //Output
    std::cout << "Minimum: \n";
    for (int w = 0; w < 5; w++) {
        std::cout << Sdata[w] << " ";
    }

    std::cout << "\n";
    std::cout << "Maximum: \n";

    for (int j = 0; j < 5; j++) {
        std::cout << Bdata[j] << " ";
    }
}

Output:

Minimum: 
1.2 4.5 2.4 3.3 6.5 
Maximum: 
3.5 8.9 6.5 7.8 9.5

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM