Здравствуйте, необходимо отсортировать по возрастанию без флага перестановки матрицу.
Код:
#include<stdio.h>
#include<iostream.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
const RAZ = 10; //Максимальный размер массиваvoid okno(int x1,int y1,int x2,int y2,int bkcol,int colb,char zag[15]);
void obnul(const int n, const int c, int**);
void sortir(const int n,const int c,int**);
void imputmas(const int n,int**);
void outputmas(const int n,const int c,int**);
int main()
{
int i,n=0,d,c;
int matr[RAZ][RAZ];
okno(1,1,80,80,BLACK,GREEN,""); // Заставка программы
gotoxy (31,12);
cprintf (" METODY SORTIROVKI\n\r ");
gotoxy (7,13);
cprintf (" SORTIROVKA PO VOZRASTANIU METODOM OBMENA BEZ FLAGA PERESTANOVKI\n ");
gotoxy (62,24);
cprintf ("Vasilieva J.N.");
getchar();
clrscr();
okno(25,1,60,7,WHITE,BLACK,"Opisanie"); // Описание программы
cprintf("\r\n V dvumernom massive razmerom\r\n");
cprintf("2n x 2n otsortirovat' stroki \r\n");
cprintf(" oblasti A6 po vozrastaniu metodom\r\n");
cprintf(" obmena bez flaga perestanovki\r\n");
okno(2,12,39,34,BLACK,WHITE,"Vvod"); // Окно ввода
gotoxy (7,2);
cprintf ("Vvedite razmer massiva"); //Ввод размера матрицы
gotoxy(17,4);
cin >> n;
if(2*n>RAZ) // Проверка размера массива
{
okno(25,10,60,12,WHITE,RED,"ERROR");
cprintf("\n Slishkom bol'shoj massiv!!!");
getchar();
return 0;
}
if(!n) // Проверка содержания введенного размера
{
okno(25,10,60,12,WHITE,RED,"ERROR");
cprintf("\n Nekkorektnuj razmer massiva!!!");
getchar();
return 0;
}
d=2*n%3; // Расчет сортируемого фрагмента
c=(2*n-d)/3;
if(n<3)
{
c=1;
}
int *dinamo[RAZ];
for(i = 0; i < RAZ; i++)
dinamo[i] = matr [i];
imputmas(n,dinamo); //Формирование массива
okno(2,12,39,34,BLACK,WHITE," Ishodnuj massiv\n\r");
outputmas(n,c,dinamo); //Вывод массива
sortir(n,c,dinamo); //Сортировка
obnul(n,c,dinamo); //Обнуление неотсортированных строк
okno(42,12,79,34,BLACK,WHITE,"Poluchennuj massiv\n\r");
outputmas(n,c,dinamo); //Вывод полученного массива
getchar();
return 0;
}
void okno(int x1,int y1,int x2,int y2,int bkcol,int colb,char zag[15])
{
window(x1,y1,x2,y2);
textbackground(bkcol);
textcolor(colb);
clrscr();
gotoxy((x2 - x1 - strlen(zag)) / 2,1);
cprintf("%s\n\r",zag);
}
void imputmas(const int n,int** dinamit)
{
int i,j;
for(i = 0; i < 2 * n; i++)
for(j = 0; j < 2 * n; j++)
dinamit[i][j] = 10*(i+1)-j; //Формула для задания массива
}
void outputmas(const int n,const int c,int** dinamit)
{
int i,j;
for(i = 0; i < 2 * n; i++)
{
gotoxy(13-2*n,i+3);
for(j = 0; j < 2 * n; j++)
if((j <= c-1)||(j >= 2*n - c)) //Выделение сортируемого фрагмента
{
textbackground(BLACK);
textcolor(RED);
cprintf("%3i",dinamit[i][j]);
textcolor(WHITE);
textbackground(BLACK);
}
else cprintf("%3i",dinamit[i][j]);
gotoxy(13-2*n,i+4);
}
}
void sortir(const int n,const int c,int** dinamit)
{
int i, j, z, k;
for (k=0; k<2*n-2; k++)
{
for (i=0;i<2*n;i++)
{
for (j=0;j<2*n-1;j++)
if((j < c-1) || (j>=2*n-c))/
{
if(dinamit[i][j]>dinamit[i][j+1])
{
z=dinamit[i][j];
dinamit[i][j]=dinamit[i][j+1];
dinamit[i][j+1]=z;
}
}
}
}
}
void obnul(const int n,const int c,int** dinamit)
{
int i,j;
for(i = 0; i < 2 * n; i++)
for(j = 0; j < 2 * n; j++)
if(j >= c && j < 2*n - c)
dinamit[i][j] = 0;
}
вначале идет просто расположение окон и т.д.....