Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2006, 17:26   #1
Bio
Новичок
Джуниор
 
Регистрация: 20.12.2006
Сообщений: 1
По умолчанию Помогите решить решенную задачку

Вообще мне надо решить вот это: "Сортировка разделением. Способ разделения : интервал между минимальным и максимальным значениями элементов массива разбить пополам и относительно этого значения разбить массив на две части (с использованием вспомогательных массивов)."
Но, чистя диск, случайно наткнулся на одну прогу. (Откуда взялась – не знаю). Интуитивно догадываюсь, что делает она то что надо. Но врубиться в смысл не могу. Короче, если кому нетрудно, объясните "на пальцах" что она делает. И если это не то что надо, подскажите, как сделать то.
Исходняк:
\\\\\\\\\\\
#include <stdio.h>

void sort(int A[], int n)
{
int B1[100],B2[100];
int i,i1,i2,s,k;
for (s=1; s!=n; s*=2) // Размер группы кратен 2
{
for (i=0; i<n/2; i++) // Разделить пополам
{
B1[i]=A[i];
B2[i]=A[i+n/2];
}
i1=i2=0;
for (i=0,k=0; i<n; i++) // Слияние с переходом " скачком"
{
f (i1==s && i2==s) // при достижении границ обеих
k+=s,i1=0,i2=0; // групп
if (i1==s) A[i]=B2[k+i2++];
else // 4 условия слияния по окончании
if (i2==s) A[i]=B1[k+i1++];
else // групп и по сравнению
if (B1[k+i1 ] < B2[k+i2 ]) A[i]=B1[k+i1++];
else A[i]=B2[k+i2++];
}
}
}

void main()

{
int A[]={3,5,7,4,1,6,8,0};
sort(A,8);
for (int i=0; i<8; i++) printf("%d ",A[i]);
}
\\\\\\\\\\\\\\\\\\

Конкретно интересует запись: B1[k+i1++] и ей подобные. Это что и как?
P.S. Использовать можно только <stdio.h>
Bio вне форума Ответить с цитированием
Старый 20.12.2006, 19:38   #2
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Цитата:
Конкретно интересует запись: B1[k+i1++] и ей подобные. Это что и как?
B1 - массив
k, i1 - переменные
Запись означает, что после этой строки (после присвоения), i1 увеличится на единицу, т.е. за место этой записи:
Код:
if (B1[k+i1 ] < B2[k+i2 ]) A[i]=B1[k+i1++];
можно было написать это:
Код:
if (B1[k+i1 ] < B2[k+i2 ]) {A[i]=B1[k+i1];i1=i1+1}
zetrix вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите решить задачку rainbow1 Паскаль, Turbo Pascal, PascalABC.NET 1 28.08.2008 16:59
помогите решить задачку gorez Паскаль, Turbo Pascal, PascalABC.NET 10 08.04.2008 14:49
Помогите решить эту задачку Magic Blood Microsoft Office Excel 1 16.05.2007 18:17
Помогите решить задачку New БД в Delphi 3 12.12.2006 19:46