编写重新排序功能

时间:2015-10-16 17:23:40

标签: c++ function

我必须编写一个函数,将从最低到最高的三个变量重新排序。函数名称是无效重新排序,我很好奇,如果无论如何我可以调用我的函数内部的最大和最小函数来压缩我的代码或者如果有一种方法我写它不使用IF语句。我已经开始了,我想在继续之前知道该怎么做。 谢谢

Halve

2 个答案:

答案 0 :(得分:1)

我将三个值放在一个向量中并调用排序算法。这给了一个干净整洁的函数,没有if语句

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

void reorder(int &min, int &med, int &max)
{
    vector<int> vec;
    vec.push_back(min);
    vec.push_back(med);
    vec.push_back(max);

    sort(vec.begin(), vec.end());

    min = vec[0];
    med = vec[1];
    max = vec[2];
}

int main()
{
    int min = 1, med = 1, max = 3;
    cout << min << " " << med << " " << max << endl;
    reorder(min, med, max);
    cout << min << " " << med << " " << max << endl;
    system("pause");
    return 0;
}

答案 1 :(得分:0)

我看不到使用min3int()max3int()进行排序的简单方法,因为他们没有告诉您有关其他变量顺序的任何信息。

我建议写一些简单易懂的内容,例如:

void reorder(int &a, int &b, int &c)
{
    if (b < a) std::swap(b, a);
    if (c < a) std::swap(c, a);
    if (c < b) std::swap(c, b);
}

可以比较没有if的值,但我更喜欢清晰的代码,除非测量显示需要进行英雄优化。也可以只用两个交换(see this question)对三个变量进行排序。