【问题标题】:Hackerearth bubbleSortHackerearth 冒泡排序
【发布时间】:2018-04-18 22:31:08
【问题描述】:

在 Hackerearth 中,我尝试解决冒泡排序交换计数问题。而且我的输出总是与正确的输出不同。例如;
我的输出是 2475,正确的输出是 2788

#include <iostream>
using namespace std;


int main()
{
int *A,tm,times=0;
cin >> tm;
A = new int[tm];
for(int i = 0; i<tm;i++) {cin >> A[i];}

int temp;

for(int i = 0; i<tm;i++){
    for(int j = 0; j < tm-i-1;j++){
        if(A[j] > A[j+1]){
            times++;;
            temp = A[j];
            A[j] = A[j+1];
            A[j] = temp;
        }
    }
}
cout << times;

return 0;
}

我做错了什么还是正确的输出有误?

【问题讨论】:

  • 独立于你得到的输出差异,因为你使用的是 C++,我强烈建议使用 std::vector 而不是原始数组和 std::swap 而不是滚动你自己的。这减少了代码的表面积,并可能消除您在此处可能遇到的任何小错误。
  • 欢迎来到 StackOverflow。请阅读并遵循帮助文档中的发布指南。 Minimal, complete, verifiable example 适用于此。在您发布 MCVE 代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中并重现您描述的问题。您的帖子有两个问题:(1)它需要输入; (2) 你没有提供测试用例。硬编码案例并完成发布。

标签: algorithm swap bubble-sort counting counting-sort


【解决方案1】:

在交换逻辑中,代替 A[j]=temp;A[j+1]=temp;

在外部 for 循环中,i&lt;tm-1 而不是 i&lt;tm

【讨论】:

    【解决方案2】:

    可能这无关紧要,但是可以找到具有更好复杂性的反转次数。此解决方案将需要 O(n^2)。它可以在 O(nlogn) 时间复杂度内完成。这个想法是使用 merge 排序,在合并状态下,您已经知道有多少值比一个值更大/更小,而无需实际计算它们。合并时,如果右子数组的值更大,则它右边的所有其他值也更大。您只需要计算正确的值有多少。这里提供了详细而令人愉快的解释。

    【讨论】:

      猜你喜欢
      • 2013-10-09
      • 2015-09-12
      • 1970-01-01
      • 2014-03-26
      • 2015-03-06
      • 2018-11-13
      • 2011-08-04
      • 2016-10-15
      • 1970-01-01
      相关资源
      最近更新 更多