C++ 中的排序,不带数组

Lai*_*oub -4 c++ sorting

我是c++新手,目前正在尝试进行排序。但无论我如何尝试,似乎都不起作用。我对 while、for 循环和数组没有任何经验,所以我希望最终有一种方法可以在没有它们的情况下进行排序。

这是我的代码:

#include <iostream>

using namespace std;

int a;
int b;
int c;
int d;

void Sort(){
    cout << "Enter 4 numbers.";

    cin >> a;
    cin >> b;
    cin >> c;
    cin >> d;

    if (a < b){
        swap (b,a);
    }

    if (b < c){
        swap (c,b);
    }

    if (c < d){
        swap (d,c);
    }
}

int main () {
    Sort();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Who*_*aig 5

现在大家已经明白了学习数组管理和循环控制的要点,我来告诉你你的排序操作到底出了什么问题。它只是部分排序,因为您选择的比较和交换是不完整的,并且坦率地说是基于受过教育的天真的猜测。

可以使用静态排序网络对四个任意值进行降序排序(无需数组)。我不会讨论它们是如何工作的,以及如何生成它们的更复杂的任务(顺便说一句,生成器确实存在)。可以说,约翰关于排序比循环和数组复杂得多的评论是正确的,并且是无限的智慧,你应该首先学习后者。

不管怎样,请看下文

#include <iostream>
#include <cstdlib>

int main() 
{
    int a, b, c, d;
    if (!(std::cin >> a >> b >> c >> d))
        return EXIT_FAILURE;

    if (a < b)
        std::swap(a, b);

    if (c < d)
        std::swap(c, d);

    if (a < c)
        std::swap(a, c);

    if (b < d)
        std::swap(b, d);

    if (b < c)
        std::swap(b, c);

    std::cout << a << ' ' << b << ' ' << c << ' ' << d << '\n';

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这些比较和交换并不是任意的。之所以专门选择它们,是因为在算法的每个点上,每个变量中的内容都是其之前代码的直接反映。对于少数数字来说,这是视觉上可以理解的。一旦超过八个左右,事情就会变得非常复杂,而且很快

您的代码已损坏,因为您实际上没有考虑交换比较中的每个步骤正在做什么,以及前面的步骤之后留下了什么。尽管您可以对较小的项目集执行此操作(优化的多阶段排序算法经常对较小的分区使用静态排序网络),但这并不是避免学习使用数组和循环控制等序列管理的借口。您将在余生中使用这些知识,并且不仅仅用于排序,还可以用于许多其他事情。