【问题标题】:Sorting Matrix with qsort function C++使用 qsort 函数 C++ 对矩阵进行排序
【发布时间】:2015-03-20 00:32:10
【问题描述】:

大家好,我需要知道我应该将什么传递给 qsort 函数来完成这项工作? 除了 qsort 函数的参数之外,其他所有内容都必须保持原样。

#include <iostream>
#include <stdlib.h>
#include <math.h>
using namespace std;

void printMatrix(int **matrix, int n){
 for(int i = 0; i<n; i++){
    for(int j =0 ; j < n; j++)
        cout<<matrix[i][j]<<" ";
 cout<<endl;
 }
}

void initMatrix(int **matrix, int n){



    for(int i = 0; i<n; i++){
     for(int j =0 ; j < n; j++){
         matrix[i][j] = rand()%10;

     }

   }
}

int compar(const void *a, const void *b){

  int ia = *((int*)a);
  int ib = *((int*)b);
  return ia-ib;

}

void deleteMatrix(int **matrix){
   delete [] matrix;

}
int main()
{
 cout<<"How many rows and cols?"<<endl;
 int n;
 cin>>n;
 int **matrix;
 matrix = new int* [n];
 for(int j = 0; j < n; j++)
    matrix[j] = new int[n];

 initMatrix(matrix,n);
 printMatrix(matrix,n);
 cout<<"Sorted matrix:"<<endl;
 qsort(matrix,n*n,sizeof(int),compar); //<-----------
 printMatrix(matrix,n);
 deleteMatrix(matrix);
 return 0;
}

附言 矩阵上必须有**指针。 提前致谢!

【问题讨论】:

  • 一般来说在 C++ 中使用 std::sort 会更好。
  • 如何对二维数组进行排序?你怎么知道qsort元素的开头和数量?
  • 描述您对二维矩阵的排序标准。

标签: c++ sorting matrix qsort


【解决方案1】:

您最好将矩阵展平为一维并使用步进变量来确定每一行的开始位置。然后排序很容易。

#include <algorithm>
#include <iostream>
#include <stdlib.h>
#include <math.h>
using namespace std;

void printMatrix(int *matrix, int matrixsize, int rowsize) {
    for (int i = 0; i < matrixsize; i+= rowsize) 
    {
        for (int j = 0; j < rowsize; j++)
        {
            cout << matrix[i + j] << " ";
        }
        cout << endl;
    }
}

void initMatrix(int *matrix, int n) 
{
    for (int i = 0; i < n; i++)
    {
        matrix[i] = rand() % 10;
    }
}

void deleteMatrix(int *matrix) {
    delete[] matrix;

}
int main()
{
    cout << "How many rows and cols?" << endl;
    int row;
    cin >> row;
    int matrixSize = row*row;
    int *matrix = new int[matrixSize];
    initMatrix(matrix, matrixSize);
    printMatrix(matrix, matrixSize, row);
    cout << "Sorted matrix:" << endl;
    sort(matrix,matrix + matrixSize); //<-----------
    printMatrix(matrix, matrixSize, row);
    deleteMatrix(matrix);
    return 0;
}

【讨论】:

  • tinstaafl 你太棒了!谢谢!
  • @LukaKovac - 如果您的问题得到解答,请记住将其标记为已解决。谢谢。
猜你喜欢
  • 2014-06-05
  • 2018-04-11
  • 2021-05-08
  • 1970-01-01
  • 2016-09-02
  • 2019-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多