for (i=0;i<m-1;i++)
for (j=i+1;j<m;j++)
if (a[0]>a[0][j])
{
for (k=0;k<n;k++)
{
h=a[k];
a[k]=a[k][j];
a[k][j]=h;
}
}
Перестановка столбцов в матрице(С++).
Создать матрицу (int a[n][m]) и меняя местами столбцы, отсортировать по возрастанию ее первую строку.
Заранее спасибо.
Цитата: wanja
Код:
for (i=0;i<m-1;i++)
for (j=i+1;j<m;j++)
if (a[0]>a[0][j])
{
for (k=0;k<n;k++)
{
h=a[k];
a[k]=a[k][j];
a[k][j]=h;
}
}
for (j=i+1;j<m;j++)
if (a[0]>a[0][j])
{
for (k=0;k<n;k++)
{
h=a[k];
a[k]=a[k][j];
a[k][j]=h;
}
}
Примено так...
Так в данном случае медленно будет. Вот вариант побыстрее(полный код) :
Код:
#include <stdio.h>
#define ROW 1024
#define COL 1024
// меняем местами два столбца. row, col - размеры матрицы, col_1, col_2 - столбцы для обмена
void swap_columns(long *p, int row, int col, int col_1, int col_2) {
long tmp;
for(int i = 0; i < row; ++i) {
tmp = p[i * col + col_1];
p[i * col + col_1] = p[i * col + col_2];
p[i * col + col_2] = tmp;
}
}
/*
void show_matrix(long p[][COL], const int row, const int col) {
int i, j;
for(i = 0; i < row; ++i) {
for(j = 0; j < col; ++j)
// if(j == 0 || (j % 7 == 0))
// putchar('\n');
printf("M[%d_%d] = %ld ", i, j, p[j]);
putchar('\n');
}
}
*/
//собс-но, ф-я сортировки, вызывающая swap_columns()
//
void sort(long p[][COL], const int row, const int col, void *sortfunc()) {
for(int i = 0; i < col - 1; ++i) {
int minind = i + 1;
for(int j = i + 1; j <= col - 1; ++j)
if(p[0][j] < p[0][minind])
minind = j;
if(p[0][minind] < p[0])
sortfunc(p, row, col, minind, i);
}
}
int main(int ac, char *av[]) {
static long matrix[ROW][COL];
int i, j;
for(i = 0; i < ROW; ++i)
for(j = 0; j < COL; ++j)
matrix[j] = 40 - j - i;
// show_matrix(matrix, ROW, COL);
sort(matrix, ROW, COL, swap_columns);
//печать значений отсортированной строки
for(i = 0; i < COL; ++i)
printf("Matrix[%d][%d] = %ld\n", 0, i, matrix[0]);
return 0;
}
#define ROW 1024
#define COL 1024
// меняем местами два столбца. row, col - размеры матрицы, col_1, col_2 - столбцы для обмена
void swap_columns(long *p, int row, int col, int col_1, int col_2) {
long tmp;
for(int i = 0; i < row; ++i) {
tmp = p[i * col + col_1];
p[i * col + col_1] = p[i * col + col_2];
p[i * col + col_2] = tmp;
}
}
/*
void show_matrix(long p[][COL], const int row, const int col) {
int i, j;
for(i = 0; i < row; ++i) {
for(j = 0; j < col; ++j)
// if(j == 0 || (j % 7 == 0))
// putchar('\n');
printf("M[%d_%d] = %ld ", i, j, p[j]);
putchar('\n');
}
}
*/
//собс-но, ф-я сортировки, вызывающая swap_columns()
//
void sort(long p[][COL], const int row, const int col, void *sortfunc()) {
for(int i = 0; i < col - 1; ++i) {
int minind = i + 1;
for(int j = i + 1; j <= col - 1; ++j)
if(p[0][j] < p[0][minind])
minind = j;
if(p[0][minind] < p[0])
sortfunc(p, row, col, minind, i);
}
}
int main(int ac, char *av[]) {
static long matrix[ROW][COL];
int i, j;
for(i = 0; i < ROW; ++i)
for(j = 0; j < COL; ++j)
matrix[j] = 40 - j - i;
// show_matrix(matrix, ROW, COL);
sort(matrix, ROW, COL, swap_columns);
//печать значений отсортированной строки
for(i = 0; i < COL; ++i)
printf("Matrix[%d][%d] = %ld\n", 0, i, matrix[0]);
return 0;
}
спасибо) буду пробывать вашые варианты
Код:
#include <iostream>
#include <cmath>
#include <conio.h>
#include <time.h>
using namespace std;
int main()
{
int n,m,i,j,h,k;
cin>>n>>m;
int a[n][m];
srand((unsigned)time(0));
for (i=0;i<n;i++) {
for (j=0;j<m;j++) {
a[j]=rand()%90+10;
cout<<a[j]<<" "; }
cout<<'\n'; }
cout<<'\n';
for (i=0;i<n;i++)
for (j=i;j<m;j++)
if (a[0]>a[0][j])
{
for (k=0;k<n;k++)
{
h=a[k];
a[k]=a[k][j];
a[k][j]=h;
}
}
for (i=0;i<n;i++) {
for (j=0;j<m;j++)
cout<<a[j]<<" ";
cout<<'\n'; }
getch();
}
#include <cmath>
#include <conio.h>
#include <time.h>
using namespace std;
int main()
{
int n,m,i,j,h,k;
cin>>n>>m;
int a[n][m];
srand((unsigned)time(0));
for (i=0;i<n;i++) {
for (j=0;j<m;j++) {
a[j]=rand()%90+10;
cout<<a[j]<<" "; }
cout<<'\n'; }
cout<<'\n';
for (i=0;i<n;i++)
for (j=i;j<m;j++)
if (a[0]>a[0][j])
{
for (k=0;k<n;k++)
{
h=a[k];
a[k]=a[k][j];
a[k][j]=h;
}
}
for (i=0;i<n;i++) {
for (j=0;j<m;j++)
cout<<a[j]<<" ";
cout<<'\n'; }
getch();
}