Другие языки программирования и технологии
Сортировка 2-мерного массива в С++
Помогите простым кодом для реализации сортировки двумерного массива по последнему числу в строчке: Например 1 2 3 4 5 4 7 8 - введённый масив 6 7 8 1 6 7 8 1 1 2 3 4 - отсортированный массив 5 4 7 8
всё что тебе надо:
#include < algorythm >
сортируешь вот так функцией сорт:
it1 - итератор на первую (нулевую) строку матрицы
it2 - итератор на последнюю строку матрицы
sort(it1, it2, compare);
функцию сравнения двох элементов необходимо описать.
всё, матрица сортированная :)
вот пример кода:
( чтобы отобразился нормально код присутствуют лишние пробелы )
# include < iostream >
# include < cstdlib >
# include < math.h >
# include < vector >
# include < ctime >
# include < algorithm >
using namespace std ;
# define R 32767.0 // для генерирования чисел от 0 до 9
// эта функция выводит на экран матрицу из sN строк и sM столбиков
template < typename T >
void print_matrix ( T& matr, int sN, int sM )
{
int i, j ;
for( i = 0 ; i < sN ; i + +)
{
for ( j = 0 ; j < sM ; j + +)
{
cout < < matr [ i ] [ j ] < < " ";
} ;
cout < < endl < < endl;
} ;
cout < < endl;
return ;
} ;
// функция необходима для sort.
// сравнивает последние элементы
bool compare ( vector < int > arg1, vector < int > arg2)
{
if ( arg1 [ arg1.size ( ) - 1 ] < arg2 [ arg2.size ( ) - 1 ] )
return true;
return false;
} ;
int main()
{
int N,M ; // - размеры
int i,j ; // - счётчики
srand ( ( time ( NULL ) ) ) ; // - сид для рандомного заполнения матрицы
// считываем размеры:
cout < < " Type M (width) of matrix: " < < endl;
cin > > M ; // - ширину (кол-во столбцов)
cout < < " Type N (height) of matrix: " < < endl;
cin > > N; // - высоту (кол-во строк)
cout < < endl;
// создаём матрицу:
vector < vector < int > > mtrx ( N, vector < int > ( M ) ) ;
// если размер "фиговый" выходим
if ( ( M < = 0 ) || ( N < = 0 ))
return 0;
// генерируем числа. я поставил от 0 до 9
for ( i = 0 ; i < N ; i + +)
{
for( j = 0 ; j < M ; j + +)
{
mtrx [ i ] [ j ] = ( rand ( ) / R ) * 10 ;
} ;
} ;
// выводим матрицу (пока ещё не отсортированную)
print_matrix(mtrx, N, M) ;
// сортируем:
sort( mtrx.begin(), mtrx.end(), compare) ;
// выводим отсортированную матрицу:
print_matrix(mtrx, N, M) ;
// завершаем программу
cout < < endl < < endl ;
system ( " pause " ) ;
return 0 ;
}
#include < algorythm >
сортируешь вот так функцией сорт:
it1 - итератор на первую (нулевую) строку матрицы
it2 - итератор на последнюю строку матрицы
sort(it1, it2, compare);
функцию сравнения двох элементов необходимо описать.
всё, матрица сортированная :)
вот пример кода:
( чтобы отобразился нормально код присутствуют лишние пробелы )
# include < iostream >
# include < cstdlib >
# include < math.h >
# include < vector >
# include < ctime >
# include < algorithm >
using namespace std ;
# define R 32767.0 // для генерирования чисел от 0 до 9
// эта функция выводит на экран матрицу из sN строк и sM столбиков
template < typename T >
void print_matrix ( T& matr, int sN, int sM )
{
int i, j ;
for( i = 0 ; i < sN ; i + +)
{
for ( j = 0 ; j < sM ; j + +)
{
cout < < matr [ i ] [ j ] < < " ";
} ;
cout < < endl < < endl;
} ;
cout < < endl;
return ;
} ;
// функция необходима для sort.
// сравнивает последние элементы
bool compare ( vector < int > arg1, vector < int > arg2)
{
if ( arg1 [ arg1.size ( ) - 1 ] < arg2 [ arg2.size ( ) - 1 ] )
return true;
return false;
} ;
int main()
{
int N,M ; // - размеры
int i,j ; // - счётчики
srand ( ( time ( NULL ) ) ) ; // - сид для рандомного заполнения матрицы
// считываем размеры:
cout < < " Type M (width) of matrix: " < < endl;
cin > > M ; // - ширину (кол-во столбцов)
cout < < " Type N (height) of matrix: " < < endl;
cin > > N; // - высоту (кол-во строк)
cout < < endl;
// создаём матрицу:
vector < vector < int > > mtrx ( N, vector < int > ( M ) ) ;
// если размер "фиговый" выходим
if ( ( M < = 0 ) || ( N < = 0 ))
return 0;
// генерируем числа. я поставил от 0 до 9
for ( i = 0 ; i < N ; i + +)
{
for( j = 0 ; j < M ; j + +)
{
mtrx [ i ] [ j ] = ( rand ( ) / R ) * 10 ;
} ;
} ;
// выводим матрицу (пока ещё не отсортированную)
print_matrix(mtrx, N, M) ;
// сортируем:
sort( mtrx.begin(), mtrx.end(), compare) ;
// выводим отсортированную матрицу:
print_matrix(mtrx, N, M) ;
// завершаем программу
cout < < endl < < endl ;
system ( " pause " ) ;
return 0 ;
}
Сортировок много, для начала можно взять пузырьком с небольшой модификацией: вместо A[j] брать A[j][3] (поскольку у нас 3-й элемент последний).
я бы написала код, но мэйл. ру его сильно перекручивает
Олег Макаров
Это очень :'-(
Похожие вопросы
- Подскажите пожалуйста. Может есть действительно сильные программеры. Вобщем дан 2-мерный массив.
- Можно-ли использовать сортировку слиянием на массиве, состоящем из 10-ти элементов.
- Сортировка двумерного динамического массива
- C# Дан массив размера N. Найти 2 элемента массива, сумма которых наиболее близка к максимуму массива и поменять
- Как отсортировать по возростанию 2-й массив в С# ?
- 2. Отсортировать массив из n чисел и подсчитать количество уникальных чисел в массиве. на паскале
- Функция для сравнения элементов 2 одномерных массивов на си?
- с# Дано 2 двумерных массива. Переставить столбцы с максимальными и минимальными элементами
- как при сортировке одномерного массива оставить на месте неположительные элементы
- Сортировка обменами. Массивы (корректировать код с++)
return true;
return false;
Короче, Склифосовский
return arg1 [ arg1.size ( ) - 1 ] < arg2 [ arg2.size ( ) - 1 ];