首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >冒泡排序问题

冒泡排序问题
EN

Stack Overflow用户
提问于 2014-11-20 19:56:43
回答 4查看 106关注 0票数 0

目前在大学学习软件工程(第一年),并制作了一个程序,其中用户输入将有多少条目,然后他们输入每个条目的时间,并按降序排序。

我遇到的问题是,当我为第一个输入输入一个很大的数字时,它不能正确排序,但其余的可以。如果有人能帮我解决这个问题就太好了,很抱歉这个菜鸟问题:

完整的代码:

代码语言:javascript
复制
#include "stdafx.h"
#include <iostream>

using namespace std;

int TotalSize = 0;

void getSpeed(int *CalculationTime, int NoOfCalculations)
{
    for (int i = 0; i < NoOfCalculations; i++)
    {
        cout << "Please enter the speed of calculation " << i + 1 << "(Ms): "; cin >>      CalculationTime[i];
    }
}

void sort_speeds(int *CalculationTime, int NoOfCalculations)
{
    // Sorting speeds in decending order
    bool swapped = true;
    int i, j = 0;
    int temp;

    while (swapped)
    {
        swapped = false;
        j++;
        for (i = 1; i < NoOfCalculations - j; i++)
        {
            if (CalculationTime[i] > CalculationTime[i + 1])
            {
                temp = CalculationTime[i];
                CalculationTime[i] = CalculationTime[i + 1];
                CalculationTime[i + 1] = temp;
                swapped = true;
            }
        }
    }

    // Output times decending order
    for (int i = 0; i < NoOfCalculations; i++)
    {
        cout << CalculationTime[i] << "\n";
    }
}

int main()
{
    // Declaring & Initializing variables
    int NoOfCalculations = 0;
    int *CalculationTime = new int[NoOfCalculations];

    // Getting user input
    cout << "How many calculations are there? "; cin >> NoOfCalculations;
    getSpeed(CalculationTime, NoOfCalculations);

    // Sorting and displaying times 
    sort_speeds(CalculationTime, NoOfCalculations);

    system("pause");

    return 0;
}
EN

回答 4

Stack Overflow用户

发布于 2014-11-20 20:02:27

您从未将数组的第一个元素与任何元素进行比较- for (i = 1; i < NoOfCalculations - j; i++)应为for (i = 0; i < NoOfCalculations - j; i++)

票数 1
EN

Stack Overflow用户

发布于 2014-11-25 08:12:50

问题是for (i = 1; i < NoOfCalculations - j; i++)你从位置1开始,从位置0开始,它解决了这个问题。for (i = 0; i < NoOfCalculations - j; i++)

票数 0
EN

Stack Overflow用户

发布于 2014-11-20 20:01:11

代码语言:javascript
复制
// Declaring & Initializing variables
int NoOfCalculations = 0;
int *CalculationTime = new int[NoOfCalculations];

// Getting user input
cout << "How many calculations are there? "; cin >> NoOfCalculations;

巴兹特。您分配了一个零元素数组,然后又没有重新分配它。我敢打赌,如果你输入了一个足够大的计算次数,你的程序就会崩溃。

实际上,您希望使用std::vector,这是一种非常有用的数据结构,它的使用有点超出了本答案的范围。基本上,你可以这样做:

代码语言:javascript
复制
std::vector<int> getSpeeds(int NoOfCalculations)
{
    std::vector<int> speeds;

    for (int i = 0; i < NoOfCalculations; i++)
    {
        int speed;
        std::cout << "Please enter the speed of calculation " << i + 1 << "(Ms): ";
        std::cin >> speed;
        speeds.push_back(speed);
    }

    return speeds;
}

您几乎可以像使用数组一样使用返回的向量:

代码语言:javascript
复制
std::vector<int> speeds = getSpeeds(10);;
if (CalculationTime[3] > CalculationTime[4])
    // do something

通常,在C++应用程序中,显式使用指针表明您没有使用标准库,其结果是使您自己的工作变得非常非常困难。

哦,还有:

代码语言:javascript
复制
for (i = 1; i < NoOfCalculations - j; i++)

您永远不会查看NoOfCalculations[0]NoOfCalculations[i - 1],因此您永远不会接触第一个元素。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27039015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档