【问题标题】:Sorting numbers of an array in descending order按降序对数组的数字进行排序
【发布时间】:2021-12-28 08:42:12
【问题描述】:

我有一个包含 16 个数字的数组,需要按降序排序,我尝试以这种方式对它们进行排序,但似乎无法正常工作。

注意:我必须编写一个算法,所以我不能使用任何特殊功能:(

#include <stdio.h>
#include <stdlib.h>

int main() {
    int i, temp1, temp2;
    int string2[16] = { 0, 4, 2, 5, 1, 5, 6, 2, 6, 89, 21, 32, 31, 5, 32, 12 };
    _Bool check = 1;

    while (check) {
        temp1 = string2[i];
        temp2 = string2[i + 1];
        if (temp1 < temp2) {
            string2[i + 1] = temp1;
            string2[i] = temp2;
            i = 0;
        } else {
            i++;
            if (i = 15) {
                check = !check;
            }
        }
    }
    
    return 0;
}

我知道这对你们大多数人来说都是非常基本的东西,但任何见解都非常感谢!

【问题讨论】:

  • “什么”不起作用?请在帖子中明确指出问题。 “似乎无法让它工作”真的很模糊。
  • 在线和文献中大约有五十亿个排序示例。
  • _Bool 是为语言实现保留的标识符。你是故意用的吗?
  • 顺便说一句:_Bool 在 C++ 程序中是一件奇怪的事情(你的书肯定没有提到它),而“string2”是整数数组的一个非常奇怪的名称。
  • 听从你的警告。更具体地说,以最大警告级别编译(-Wall 与 gcc,/W4 与 MSVC)并消除或理解警告。

标签: c++ sorting


【解决方案1】:

有几个问题:

  1. _Bool 在 C++ 中使用起来很奇怪(也许这个问题是针对 C 的?)
  2. 你没有初始化i。这称为undefined behavior。这可能有效,也可能无效,具体取决于计算机,但在您的程序中包含这样的内容绝不是好事。
  3. (i=15) 是一个任务。使用i==15 进行比较,因为== 是“等于”的comparison operator

审核代码:

#include <stdio.h>
#include <stdlib.h>
#include <iostream>

int main()
{
    int i = 0,temp1,temp2; //i should be initialized
    int string2[16] = {0,4,2,5,1,5,6,2,6,89,21,32,31,5,32,12};
    bool check=1;

    while(check)
    {
        temp1=string2[i];
        temp2=string2[i+1];

        if(temp1<temp2)
        {
            string2[i+1]=temp1;
            string2[i]=temp2;
            i=0;
        }

        else
        {
            i++;
            if(i==15) { check=!check; } // = -> ==
        }
    }

    //if this is intended for C, you can ignore this bit, or use printf
    for (int i = 0; i < 16; i++) { std::cout << string2[i] << " ";}
}

输出:89 32 32 31 21 12 6 6 5 5 5 4 2 2 1 0

更多美学说明:

  • 如果您使用缩进(制表符和/或空格),请保持一致。其他人可能很难理解您的代码,尽管程序何时编译并不重要(对于任何质疑的人,这是在他重新缩进代码之前)。
  • string2int 数组的不规则名称。同样,它可能会引起混乱。一读:https://1c-dn.com/library/rules_of_naming_variables/

【讨论】:

  • 似乎 i=15 是问题所在!谢谢!
  • 不!所有这些点都是问题(至少2和3)。这正是为什么我认为解释事情并提供工作代码从来都不是一件有益的事情。解释部分应该够了。
  • @Federico 嗯,也许你是对的。下次我会尝试这样做。
  • @silverfox 只是为了澄清一下,这不是对您的回答的负面评论,它清楚而完整。但我假设他复制/粘贴了这段代码 => “它有效” => 酷!下次我会小心 ifs 内的 ==。而且(出于某种原因)他失去了初始化变量的重要性。
  • @Federico 当然,我明白,不用担心:P 我会考虑到这一点,下一次就是我要说的。
【解决方案2】:

您也可以将std::sortstd::greater&lt;int&gt;() 参数一起使用: std::sort(std::begin(string2), std::end(string2), std::greater&lt;int&gt;()); 不要发明自行车,除非你需要学习一些东西或者你知道如何优化你的情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多