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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.10.2011, 07:54   #1
beattie
Новичок
Джуниор
 
Регистрация: 07.10.2011
Сообщений: 1
По умолчанию Рекуррентное слияние

Только учусь с++, пыталась сделать рекуррентную сортировку слиянием, и просто не знаю, как реализовать правильно
Вот код полностью
Код:
 
void mergearrays(int result[], int s, int k, int e)

{
    int *a = new int[k - s+1], *b = new int[e - k ];
    int j=0;
    for (int i = s; i <= k; i++)
    {
          a[j] = result[i];
          j++;
     }
      j = 0;
      for (int i = k+1; i <= e; i++)
      {
           b[j] = result[i];
           j++;
      }
      int i_a=0,i_b = 0;
      j = s;
      while (i_a < k - s+1 && i_b < e - (k))
      {
           if (a[i_a] <= b[i_b])
           {
                result[j] = a[i_a];
                j++;
                i_a++;
           }
           else
           {
                 result[j] = b[i_b];
                 j++;
                 i_b++;
            }
       }
            if (i_a >= k-s+1)
            {
                while (i_b < e - (k))
                {
                    result[j] = b[i_b];
                    j++;
                    i_b++;
                }
            }
            else
            {
                while (i_a < k  - s+1)
                {
                    result[j] = a[i_a];
                    j++;
                    i_a++;
                }
            }
        }


int SortMergeRecurrent(int StartArray[])
{	int lenght;
	int n = StartArray[lenght]; int c; int e;
	int *result = new int [n];
		for (lenght = 0; lenght < n; lenght ++)
			result[lenght] = StartArray[lenght];
				for(lenght = 1; lenght< n; lenght *=2)
				{
					for (int b = 0; b < n; b += lenght * 2)
					{
						c = min(b + length - 1, n - 1);
						e = min( c + length , n - 1 ); 
						mergearrays(result, b, c, e);
					}
				}


}

Последний раз редактировалось Stilet; 08.10.2011 в 08:20.
beattie вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Слияние ageevp Microsoft Office Word 0 18.05.2011 11:07
Слияние с HTML lion1 Microsoft Office Word 0 02.11.2009 12:23
Слияние Николетта Microsoft Office Word 1 25.05.2009 07:26
Слияние Николетта Microsoft Office Excel 2 30.04.2009 04:47