C++ 气泡按降序排列文件中的第一个数字
我想使用2d数组的“气泡排序”算法进行排序。我的数组大小大约为C++ 气泡按降序排列文件中的第一个数字,c++,arrays,sorting,bubble-sort,C++,Arrays,Sorting,Bubble Sort,我想使用2d数组的“气泡排序”算法进行排序。我的数组大小大约为数组[100000][100000]。我的输入号码将为n=100000 目前,我们可以使用较小的数组大小来解决排序问题 我需要按照降序排列第一个数字(第一个数字的行) 如果两个值的第一个数相同,那么我必须根据它们的第二个数对它们进行排序 最后,我必须将结果输出到一个txt文件中 让我们用一个例子来理解。这里,我的输入如下所示 41 11 34 4 69 4 78 6 62 8 5 5 81 3 5 10 上面是我们的输入示例,我们有
数组[100000][100000]
。我的输入号码将为n=100000
目前,我们可以使用较小的数组大小来解决排序问题
41 11
34 4
69 4
78 6
62 8
5 5
81 3
5 10
上面是我们的输入示例,我们有几个输入。现在我需要按降序排列第一个数字。但如果两个值的第一个数相同,则根据第二个数对它们进行排序
下面的输出示例
81 3
78 6
69 4
62 8
41 4
34 4
5 10
5 5
如果有人能帮助我
我是一个初学者,所以我试图手动输入文件来解决这个排序问题。我可以解决排序问题,然后我将尝试输入和输出文本
我试过但没用的东西。我还在努力解决它
#include<bits/stdc++.h>
#include <algorithm>
using namespace std;
int main ()
{
int arr[100][100];
int n,j;
cin >>n;
cout << "Please enter a number: " << endl;
for(int i=0;i<n;i++)
{ for (int j=i; j<n; j++)
{
cin>>arr[i][j];
}
}
cout << "Unsorted array:" << endl;
for (int i=0; i<n; i++)
{
for (int j=i; j<n; j++)
{
cout<<arr[i][j]<<"\t";
}
}
for (int i=0; i<=n; i++)
{
for (int j=i+1; j<=n-1; j++)
{
int temp;
if(arr[i]>arr[j])
{
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
return 0;
}
#包括
#包括
使用名称空间std;
int main()
{
国际航空公司[100][100];
int n,j;
cin>>n;
不能对基本容器使用std::vector
。std::vector
的动态增长功能解决了堆栈空间问题,使用std::array
可以进行绑定单元格比较。即,您可以这样做:
std::array<int, 2> ar1{1,2}, ar2{1,3};
if (ar1 < ar2) ...
输出
8
41 11
34 4
69 4
78 6
62 8
5 5
81 3
5 10
81 3
78 6
69 4
62 8
41 11
34 4
5 10
5 5
arr[100000][100000]是一个巨大的数组大小,这是不可能的。您必须减小大小。请检查此链接,以获取最大数组大小,请使用std::vector arr(n,std::vector(n))
并将数字存储在其中。@TEDLYNMO仍然不起作用,问题中提到的大小太大,它会导致堆栈溢出。在正常情况下,最大数组大小可以是10^7。@NitaiChandraBanik只有输入了真正大的n
才会有问题。此外,在堆上分配数组也会起作用大多数情况下。堆栈分配操作很可能会失败,正如您所指出的。非常感谢您。现在我将学习您的代码,我需要理解它。然后我将从文本文件中获取输入。这并不十分复杂。您可以在上找到关于此代码中使用的模板类的更多信息,可以说这是最好的在线re在C++中,我不理解你的问题,但是这个代码中的排序是一个简单的早期退出冒泡。它反复地扫描数据集,每个通道比较相邻的项目并根据需要交换它们。每次扫描后,该扫描的最极端项都“冒泡”。最后。下一次扫描迭代将减少一个项目,并重复该过程。如果在任何扫描之后,我们可以确定没有发生交换,那么整个序列将完全排序,我们可以停止所有操作。这是bubblesort的一个(唯一)赎回值。它是O(n)如果序列被排序。这对我帮助很大。现在,我想从我们手动输入的文本文件中输入,并生成一个输出文本文件。您可以始终使用重定向和欺骗:/prognameoutputfile
。这实际上是说,使用inputfile
的内容作为stdin运行/progname
,所有写入stdout
的内容都转到outputfile
。否则,需要检查argc
、argv
、站立和对象等。这些类的用法和说明在链接中
81 3
78 6
69 4
62 8
41 11
34 4
5 10
5 5