对 2D 数组进行排序 C++
Sorting 2D Array C++
是否可以使用 qsort 或 std::C++sort 对 2D 数组进行排序,以便在每行从左到右或每列从上到下读取时元素按递增顺序排列?
例如
13, 14, 15, 16
1, 4, 3, 2
7, 5, 7, 6
9, 10, 11, 12
成为:
{ 1, 2, 3, 4 }
{ 5, 6, 7, 8 }
{ 9, 10, 11, 12 }
{ 13, 14, 15, 16 }
我知道您可以通过创建两个比较函数,然后首先对每一行进行排序,然后比较每行的第一个元素以建立列来做到这一点,但是有没有办法在一个函数本身中做到这一点?
# include <iostream>
using namespace std ;
void swap (int &x , int &y)
{
int temp = x ;
x = y ;
y = temp ;
}
void main ()
{
int arr [3][3] = {{90,80,70},{60,50,40},{30,100,10}} ;
int x ;
for (int k = 0; k < 3; k++)
{
for (int m = 0; m < 3; m++)
{
x = m+1;
for (int i = k; i < 3 ; i++)
{
for (int j = x; j < 3; j++)
{
if (arr [k][m] > arr [i][j])
swap(arr [k][m] ,arr [i][j]);
}
x=0;
}
}
}
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
cout << arr [i][j] << " ";
}
}
system("pause");
}
C++ 二维数组升序排序
是的。C++ STL 库是算法和容器分离构建的。将它们连接在一起的是迭代器。原始指针是迭代器,因此可以使用原始指针初始化向量,然后像往常一样对该向量进行排序。
std::vector<int> v(arr2d, arr2d + N); // create a vector based on pointers
// This assumes array is contiguous range
// in memory, N=number of elemnts in arr2d
// using default comparison (operator <):
std::sort (v.begin(), v.end());
// cout by 4 elements in a row
理论上,
您应该能够将 16 个数字输入到数组中。使用 for 循环(甚至可能是嵌套循环)对数字进行排序。那么至于输出,你想要四组四的升序数字吗?
cout<<Vector[0]<<Vector[1]<<Vector[2]<<Vector[3]<<endl;
cout<<Vector[4]<<Vector[5]<<Vector[6]<<Vector[7]<<endl;
cout<<Vector[8]<<Vector[9]<<Vector[10]<<Vector[11]<<endl;
cout<<Vector[12]<<Vector[13]<<Vector[14]<<Vector[15]<<endl;
非常武断,但我不太确定这个问题。
首先制作一个 2D 向量。
对此 2D 矢量中的每个矢量进行排序
对整个向量进行排序
法典:
#include <iostream>
#include <vector>
#include <algorithm>
template <class T>
void Sort2dArray(std::vector<std::vector<T>> & numbers)
{
for(auto & i : numbers){//sort each vector<T> in numbers
std::sort(i.begin(),i.end());
}
std::sort(numbers.begin(),numbers.end(),[](//sort numbers by defining custom compare
const std::vector<T>& a,const std::vector<T>&b){
for(int i=0;i<a.size()&&i<b.size();i++)
{
if(a[i]>b[i])
return false;
else if(a[i]<b[i])
return true;
}
return a.size()<b.size() ? true : false;
});
}
int main()
{
std::vector<std::vector<int>> numbers={ {13, 14, 15, 16},
{1, 4, 3, 2},
{8, 5, 7, 6},
{9, 10, 12,11}};
Sort2dArray(numbers);//sort array
//write sorted array
for(auto i:numbers)
{
for(auto j:i)
std::cout<<j<<" ";
std::cout<<"n";
}
}
**在 c++ 中对二维数组进行排序**
#include <iostream>
using namespace std;
int main()
{
int i,j,k,m,temp,n,limit;
int** p;
cout<<"Enter the limit:";
cin>>limit;
p=new int*[limit];
//inputing
for(i=0;i<limit;i++)
{
p[i] = new int[limit];
for(j=0;j<limit;j++)
{
cin>>p[i][j];
}
}
//sorting
for(i=0;i<limit;i++)
{
for(j=0;j<limit;j++)
{
if (j==limit-1 && i<limit-1)
{
n =-1;
m=i+1;
}
else
{
m=i;
n=j;
}
for(k=n+1;k<limit;k++)
{
if(p[i][j] > p[m][k] )
{
temp = p[i][j];
p[i][j] = p[m][k];
p[m][k] = temp;
}
if(k==limit-1 && m<limit-1) { m++; k=-1; }
}
}
}
//displaying
for(i=0;i<limit;i++)
{
for(j=0;j<limit;j++)
{
cout<<p[i][j]<<endl;
}
}
return 0;
}
相关文章:
- 二叉排序树无法编译
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- C++选择排序算法中的逻辑错误
- 使用C++程序合并排序没有得到正确的输出
- 计算排序向量的向量中唯一值的计数
- 排序算法c++
- 使用2个键的cpp-stl::优先级队列排序不正确
- 将结构向量排序为子组
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 如何对点云数据进行排序
- 对字符串进行排序时,在c++中处理sort()
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 下面是排序算法O(n)吗
- std::sort()函数无法对向量的一部分进行排序
- shell排序中的交换和比较
- clang格式:禁用排序包含
- 显示错误输出的简单数组排序程序
- 为什么我的排序算法会更改数组值
- 试图在c++中对数字列表进行排序
- 如何在C++中对数组进行冒泡排序