2015-03-20 3 views
-2

Здравствуйте, ребята, мне нужно знать, что я должен передать функции qsort, чтобы сделать эту работу? Все остальное должно оставаться как есть, кроме аргументов функции qsort.Сортировочная матрица с функцией qsort C++

#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 Там должно быть ** указатель на матрицу. Спасибо заранее!

+2

В общем, лучше использовать std :: sort в C++. – user1436187

+0

Как работает сортировка по 2-мерному массиву? Как вы говорите 'qsort' начало и количество элементов? –

+0

Опишите, что ваши критерии сортировки для 2-мерной матрицы. – PaulMcKenzie

ответ

0

Возможно, вам лучше сгладить матрицу до 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; 
} 
+0

tinstaafl ВЫ УДИВИТЕЛЬНЫ! БЛАГОДАРЯ ! –

+0

@ LukaKovac - Если на ваш вопрос ответили, не забудьте отметить его решение. Благодарю. – tinstaafl

Смежные вопросы