使用 qsort 函数对矩阵进行排序 C++

Sorting Matrix with qsort function C++

大家好,我需要知道我应该将什么传递给 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;
}

P.S 矩阵上必须有 ** 指针。 提前致谢!

您最好将矩阵展平为一维并使用步长变量来确定每一行的开始位置。那么排序就很简单了。

#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;
}