IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

 
 Ответить  Открыть новую тему 
> Сортировка бинарными вставками
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 8
Пол: Женский
Реальное имя: Katia

Репутация: -  0  +


Задание: в матрице размера m*n упорядочить строки матрицы по невозрастанию сумм элементов строк
(сортировка бинарным вставками)

вот программа:
#include <stdio.h>
#include <math.h>
#include <conio.h>
void main()
{
float a[20][20], sum[20], c[20];
int an,bk,i,j,n,m,k,l;
float b;
clrscr();
printf("Введите размеры матрицы\n");
scanf("%d%d",&n,&m);
printf("Ввод матрицы A\n");
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
scanf("%g",&a[i][j]);
}

for(i=0;i<n;i++)
{
sum[i]=0;
for (j=0;j<m;j++)
sum[i]+=a[i][j];
}
for (i=1;i<n;i++)
{
if (sum[i]>=sum[i-1]);
else
{
{
an=1;
bk=i-1;
if(sum[i]<=sum[1])
bk=1;
else
do
{
k=(an+bk)/2;
if ( (sum[i]>=sum[an])&(sum[i]<=sum[k]))
bk=k;
else
an=k;
}
while ((bk-an)>=1);

for(j=0; j<m;j++)
c[j]=a[i][j];
b=sum[i];
for(l=i;l<bk;l--)
for(j=0;j<m;j++)
a[l][j]=a[l-1][j];
for (l=0;l<bk;l--)
sum[l]=sum[l-1];
for(j=0;j<m; j++)
a[bk][j]=c[j];
sum[bk]=b;
}
}

printf("Матрица A\n");
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)

printf("%g\t",a[i][j]);

printf("\n");
}
}



Но работает как-то коряво
Например, если набрать матрицу 2*2 - 4 5 8 9 , то всу ок, а если - 8 9 4 5, то no1.gif unsure.gif

Заранее огромное СПАСИБО
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Murlika, так лучше:
#include <stdio.h>
#include <math.h>
#include <conio.h>

int main() {

float _a[20][20], sum[20];
int i, j, m, n;

clrscr();
printf("matrix size\n");
scanf("%d%d",&n,&m);

printf("matrix A >>\n");
for(i = 0; i < n; i++)
for(j = 0; j < m; j++) {
scanf("%g",&_a[i][j]);
}

for(i = 0;i < n; i++) {
sum[i] = 0;
for (j = 0; j < m; j++) sum[i] += _a[i][j];
}

// Собственно сортировка
{
int i, j, pos, a, b, middle, num;
int ii;
float T[20];

for (i=1; i < n; i++) {
a = 0; b = i;
num = sum[i];
for(ii = 0; ii < m; ++ii) T[ii] = _a[i][ii];

while(a != b) {

middle = (a + b) / 2;
if(num > sum[middle]) {
a = middle + 1;
}
else {
b = middle;
}
}
pos = a;

for(j = i; j > pos; j--) {
sum[j] = sum[j-1];
for(ii = 0; ii < m; ++ii) _a[j][ii] = _a[j - 1][ii];
}

sum[pos]=num;
for(ii = 0; ii < m; ++ii) _a[pos][ii] = T[ii];
}
}

// Вывод результата
printf("A = \n");
for(i = 0; i < n; i++) {
for(j = 0; j < m; j++) printf("%g\t",_a[i][j]);
printf("\n");
}
return 0;
}
?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 8
Пол: Женский
Реальное имя: Katia

Репутация: -  0  +


Volvo, огромное Вам спасибо smile.gif
give_rose.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 24.10.2017 18:07
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"