如何修复输出显示,以便显示正确排序的数据
How to fix output display so it shows correctly sorted data
当我调用我的打印功能时,我的程序通过气泡排序运行后显示了未分类的数据。我已经将我的代码与朋友和有关泡泡排序进行了比较,我在geeksforgeeks(https://www.geeksforgeeks.org/bubble-sort/(上进行了比较。
我正在为我的大学数据结构课程编写一个具有4个排序功能的程序。理论上应该发生的事情是该程序在具有8000个随机数的数据文件中读取,并根据称为排序的数据(泡泡排序,插入排序,选择排序和快速排序(对数据进行分类。调用打印功能,并将显示每个第1000个数据元素,以表明数据确实已排序。我已经尝试将打印件在MAIN中进行编码,将打印调用放在排序功能中,并使用功能打印,四圈检查了我的排序功能。我还尝试了不同的编译器和一台不同的计算机,但我怀疑我的代码很时髦。
原始代码:
#include <iostream>
#include <fstream>
#include <string>
#include <cmath>
#include <iomanip>
using namespace std;
const int arraysize = 8000;
int numcompares, numcopies;
void swapem(double a, double b)
{
double temp;
temp = a;
a = b;
b = temp;
}
void bubblesort(double r[], int n)
{
int j, i;
for (j = 0; j < n - 1; j++)
{
for (i = 0; i < n - 1; i++)
{
numcompares++;
if (r[i] > r[i + 1])
{
swapem(r[i], r[i + 1]);
numcopies += 3;
}
}
}
}
void printem(double r[])
{
cout << r[1000] << ", " << r[2000] << ", " << r[3000] << ", " <<
r[4000] << ", " << r[5000] << ", " << r[6000] << ", " << r[7000] << ", " << r[7999] << endl;
}
int main()
{
ifstream inf("data.dat");
ofstream outf("sorted.ot");
string sortname;
double arraynums[arraysize];
for (int i = 0; i < arraysize; i++)
{
inf >> arraynums[i];
}
bubblesort(arraynums, arraysize);
system("pause");
return 0;
}
我尝试过:
void printem(double r[], int n)
{
int i;
for (i = 0; i < n; i++)
cout << r[i]<< ", ";
}
printem(arraynums,20); // in main
和Main
for (int i = 0; i < 10; i++)
{
cout << arraynums[i] << endl;
}
这是拒绝排序
的8000个随机整数中的10个41275.4
12113.1
50676
7662.34
50688.3
-7926.28
13672.8
-3212.9
-13046.5
-16798
输出应为:-16798-13046.5-7926.28-3212.97662.3412113.113672.841275.45067650688.3
,它以未分类的形式保持不变:41275.412113.1506767662.3450688.3-7926.2813672.8-3212.9-13046.5-16798
欢迎来到堆栈溢出!似乎您在这里拥有的是通过value vs 通过参考通过的经典案例。C中的一个函数无法修改其参数的值以外的范围,但可以访问由其参数引用的内存并修改。
swapem((仅在方法本身的范围内更改A和B,但不会更新在A和B位置引用的数据。为了解决这个问题,您可以将A和B作为指针传递,并修改指针所引用的值,例如:
void swapem(double *a, double *b) {
double temp = *a;
*a = *b;
*b = temp;
}
,该方法本身将采用这些数组元素而不是其值的参考。在上面的示例中,看起来像这样:
swapem(r + i, r + (i + 1))
这里有一系列相关信息,请通过值和参考。有些技术性是,您实际上您将指针的价值传递到了上述示例中,从技术上讲,这使其按价值通过,但它是对您要修改的实际变量的参考,因此该概念仍然在这里保持真实。
了解您的bubblesort((函数的作用很重要。它收到数组成员的arraynums'的复制。它在上面进行排序,然后终止。在此功能结束时,您没有与此分类的数组。
但是,等等,即使您的swapem((也无法正常工作,因为它也将收到2个值的副本并在本地进行交换。此通话后您不会交换值。
要解决此问题,您需要在Swapem((函数中使用通过传递。
void swapem(double & a, double & b)
{
double temp;
temp = a;
a = b;
b = temp;
}
在bubbelsort((函数中,如果您要Bubblesort进行打印,则可以立即使用printem((函数。取而代之的是,您可以简单地将数组作为引用Bubblesort((,在其末尾您将具有修改的arraynums数组。
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- 显示错误输出的简单数组排序程序
- 如何修复输出显示,以便显示正确排序的数据
- 需要帮助显示排序的数组值
- 根据标准对结构向量进行排序,然后显示结果
- 为什么调试器在排序前显示问题
- 显示排序模拟
- 合并排序,I/O使用文件显示分割故障
- 使用选择排序对名称进行排序并显示数据
- 对输入'age'名称进行排序,然后显示结果
- QT 排序模型并在表视图中显示
- 如何在C++中对对象列表进行排序和显示
- 为什么 Go 不显示内存重新排序?
- 除了显示平均,最高和最低温度之外,有没有办法打印出整个排序列表
- 一个函数,它将显示使用插入排序对 c++ 进行排序的数组的内容
- 在使用向量和排序输入值期间不显示输出
- 按字母表对字符串数组进行排序并显示值
- 排序程序仅显示第一个和最后一个数字
- 排序前显示的随机数
- 如何根据结果对结构进行排序,并根据排序显示输出