Задача: Расширенная сортировка дв. массива (сортировка по-столбцам с з

Статус
Закрыто для дальнейших ответов.

Exilien

New member
06.11.2010
3
0
#1
Здравствуйте.
Помогите пожалуйста с функцией сортировки матрицы:
void SortMatrix(
int **pMatrix, // Указатель на матрицу
int Rows, // Количество строк матрицы
int Cols ) // Количество столбцов матрицы
её прототип.
Задача:
Характеристикой столбца матрицы назовем сумму его отрицательных элементов, имеющих нечетные значения индексов. Переставляя столбцы заданной матрицы, расположить их в соответствии с убыванием характеристик.

Если не сложно напишите сам цикл сортировки или пример, выполняющий схожую задачу.
 

DarkKnight

Well-known member
01.08.2010
653
0
#2
C++:
/*
Помогите пожалуйста с функцией сортировки матрицы: 
void SortMatrix(
int **pMatrix, // Указатель на матрицу
int Rows, // Количество строк матрицы
int Cols ) // Количество столбцов матрицы
её прототип.
Задача:
Характеристикой столбца матрицы назовем сумму его отрицательных элементов, имеющих нечетные значения индексов.
Переставляя столбцы заданной матрицы, расположить их в соответствии с убыванием характеристик.
*/
/*
codeby.net
Autor: DarkKnight125 (Denis Goncharov)
*/
#include <iostream>
#include <time.h> //Для генератора случ. величины

using namespace std;
void SortMatrix( int **pMatrix, int Rows, int Cols )
{
int *Arr; //Вспомогательный массив для хранения характеристики
Arr = new int[Cols];
//Заполним характеристики
for (int i = 0; i < Cols; i++) //Обойдем все столбцы
{
int Sum = 0; //Текущая сумма
for (int j = 0; j< Rows; j++) //Обойдем все строки
if (pMatrix[j][i] < 0 && ((j+1)%2) != 0)
Sum+= pMatrix[j][i];
Arr[i] = Sum;
}
//Ну а теперь будем полученные данные сортировать в соответсвии с убыванием характеристики
int iMax; //Введем переменную макс. значения
int Index = -1; //Макс. индекс
for (int i = 0; i < Cols; i++)
{
iMax = numeric_limits<int>::min(); //Введем переменную макс. значения и присвоем ей самое минимальное значение
for (int j = i; j < Cols; j++)
{
if (iMax < Arr[j])
{
iMax = Arr[j];
Index = j;
}
}
int Temp = Arr[i];
Arr[i] = Arr[Index];
Arr[Index] = Temp;
for (int z = 0; z < Rows; z++)
{
int Temp2 = pMatrix[z][Index];
pMatrix[z][Index] = pMatrix[z][i];
pMatrix[z][i] = Temp2;
}
}

}
//Основная функция программы (точка входа)
void main (void)
{
int**	Matrix; //Наша исходная матрица (указатель на указатель)
int		Row; //Размерность нашей матрицы (строки)
int		Col; //Размерность нашей матрицы (колонки)
int		RandVal; // Предельное значение генерации случ. величины

setlocale(LC_ALL,".1251"); //Подгрузим локаль 1251-кодовая страница
srand(time(NULL)); //Инициализируем генератор случ. величины

cout << "Введите кол-во строк матрицы ";
cin >> Row;
cout << "Введите кол-во столбцов матрицы ";
cin >> Col;
cout << endl << endl << "Генерация значений матрицы" << endl;
cout << "Введите макс. значение генерируемых значений (предел) ";
cin >> RandVal;
//Заполнение случ. значениями и инициализация матрицы
Matrix = new int*[Row]; //Выделим память под строки
cout << "Наша матрица Matrix : " << endl;
for (int i = 0; i< Row; i++)
{
Matrix[i] = new int[Col]; //Выделим память под столбцы
for (int j = 0; j< Col; j++)
{
Matrix[i][j] = rand()%RandVal * (rand()%2?1:-1);
cout << Matrix[i][j] << " , ";
}
cout << endl;
}

SortMatrix(Matrix, Row, Col );

cout << "Результат после сортировки Matrix : " << endl;
for (int i = 0; i< Row; i++)
{
for (int j = 0; j< Col; j++)
cout << Matrix[i][j] << " , ";
cout << endl;
}

//Почистим за собой
for (int i = 0; i < Row; i++)
delete[] Matrix[i];
delete[] Matrix;

}
 

Вложения

Статус
Закрыто для дальнейших ответов.