当前位置: 代码迷 >> 综合 >> C++对二维数组某一行或某一列或多行、多列进行升序及降序_sort函数直接法_冒泡排序法
  详细解决方案

C++对二维数组某一行或某一列或多行、多列进行升序及降序_sort函数直接法_冒泡排序法

热度:64   发布时间:2024-02-13 17:38:05.0

1.首先若使用sort()函数直接来进行排序的话,则使用的二维数组应利用 vector< vector<int> > totalnum;这样的来定义二维数组

    首先将数据压入到一个一维数组 vector<int> nums;中之后将nums压入到totalnum中即可完成二维数组数据的添加

    首先定义好大小,如 规定大小为 4 行 3列

   

//之前规定了大小为 4 行 3 列vector<vector<int> totalnum;vector<int> nums;for(int i=0;i<4;i++){for(int j=0;j<3;j++){int n;cin>>n;nums.push_back(n);  //得到每一行的数据}sort(nums.begin(),nums.end());  //直接利用 #include <algorithm> 的函数 sort//这种方法是 从左到右 依次 变大//sort(nums.begin(),nums.end(),greater<int>()); //这种是依次变小totalnum.push_back(nums); //将一个一维数组添加到其中nums.clear();  //将这一次的数据清空}
//这样就完成了对每一行的排序,直接就是输入的时候就进行了排序,当然可以选择,先输入后,再排序,也 //就将输入语句 cin>>n 删除即可
//而若是想指定某一行的话,可以在排序sort这里加上一个if如:if(i==想要排序的行数){   sort(nums.begin(),nums.end());}

    以上便是直接使用提供的库函数sort来进行的对 行 进行的排序 ,而针对每一列,如 a[0][1] ,a[1][1],a[2][1].. 即是对第二列进行排序的数字

     为了方便,所以若进行列排序的话,可以使用 int a[4][3]这样的方式定义二维数组来进行排序

      其实就是把 列数给固定住,然后对行数进行循环即可,如下面即是对 第 0列进行的排序,当然是可以根据用户需求而改的,当固定住后,便可直接使用冒泡排序的经典做法,一套常规操作即可。

	for(int j=0;j<4-1;j++){//	cout<<a[1][j];//现在这个就是个一维数组for(int k=0;k<4-1-j;k++){if(a[k][0]<a[k+1][0]){int temp = a[k][0];a[k][0]=a[k+1][0];a[k+1][0] = temp;   //对 第 0 列进行排序 }}}

 而针对行排序其实和这个列排序类似,只是行排序应该是固定住 行数,而不断的循环 列数,最后使用同样的冒泡排序即可,下方给了做成函数 sortRow,这样的话就便于循环使用该函数了

void sortRow(int a[4][3] , int  m)   //输入对几行进行排序
{   for(int j=0;j<3-1;j++){for(int k=0;k<3-1-j;k++){if(a[m][k]>a[m][k+1]){int temp = a[m][k];a[m][k]=a[m][k+1];a[m][k+1] = temp;}}}

总的来说,对于行排序的话,用库中提供的vector来创建二维数组,然后进行特定行的排序,个人感觉比较容易写,而且在一些笔试的场景下,如果一下子不能快速反应出那些排序的方法,而慢慢的推什么冒泡等排序方法,那么时间可不等人,所以若是可以利用vector的情况下,使用sort函数也不失为一种好的方法。

       当然其他的排序方法也应该将其掌握,毕竟有时会问那些排序方法的各个特性。

 

         

  相关解决方案