目前正在大学(第一年)学习软件工程,并制作了一个程序,用户输入的条目数量,然后输入每个条目的时间,并按降序排序。
我遇到的问题是,当我为第一个输入输入一个大数字时,它没有正确排序,但其余的则排序。如果有人可以帮助我解决这个问题,那将会很棒: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;
}
答案 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;
}
}
}