冒泡排序问题

时间:2014-11-20 11:56:43

标签: c++ sorting bubble-sort

目前正在大学(第一年)学习软件工程,并制作了一个程序,用户输入的条目数量,然后输入每个条目的时间,并按降序排序。

我遇到的问题是,当我为第一个输入输入一个大数字时,它没有正确排序,但其余的则排序。如果有人可以帮助我解决这个问题,那将会很棒:P

整个代码:

#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;
}

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

// Declaring & Initializing variables
int NoOfCalculations = 0;
int *CalculationTime = new int[NoOfCalculations];

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

Bzzzt。您分配零元素数组,然后不重新分配它。我敢打赌,如果你为你的计算数量输入足够多的数字,你的程序就会崩溃。

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

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;
}

您可以使用返回的向量,就像它是一个数组一样:

std::vector<int> speeds = getSpeeds(10);;
if (CalculationTime[3] > CalculationTime[4])
    // do something

通常,在C ++应用程序中,指针的明确使用表明您没有使用标准库,因此使您的生活变得更加困难。

哦,还有:

for (i = 1; i < NoOfCalculations - j; i++)

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

答案 3 :(得分:-1)

while (swapped)
{
    swapped = false;
    j++;
    for (i = 0; i < NoOfCalculations - j; i++)   //try and start i from 0. I think you are missing the first element to check
    {
        if (CalculationTime[i] > CalculationTime[i + 1])
        {
            temp = CalculationTime[i];
            CalculationTime[i] = CalculationTime[i + 1];
            CalculationTime[i + 1] = temp;
            swapped = true;
        }
    }
 }