Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Листинг 1 Абстрактное обменное слияние

Читайте также:
  1. Абстрактное
  2. АБСТРАКТНОЕ И КОНКРЕТНОЕ В ДИАЛЕКТИЧЕСКОЙ ЛОГИКЕ
  3. Абстрактное искусство и творческая свобода художника
  4. Алгоритм сортировки слиянием
  5. Восходящая сортировка слиянием
  6. Джозефина Анджелини СЛИЯНИЕ ЗВЕЗД 1 страница
  7. Джозефина Анджелини СЛИЯНИЕ ЗВЕЗД 10 страница

template <typename T>

void MergeSort(T * RES, int left, int m, int right) {

int i,j;

T * WORK = new T[right];

for(i=m+1;i>left;i--) WORK[i-1]=RES[i-1];

for(j=m;j<right;j++) WORK[right+m-j]=RES[j+1];

for(int k=left;k<=right;k++)

if(WORK[j]<WORK[i])

RES[k]=WORK[j--];

else

RES[k]=WORK[i++];

}

Данная программа выполняет слияние двух файлов без использования служебных меток, путем копирования второго массива в массив WORK в обратном порядке, когда сразу за концом первого массива следует конец второго (т.е., устанавливая на WORK битонный порядок). Первый цикл for перемещает первый массив, после чего i указывает на left, что означает готовность начинать слияние. Второй цикл for перемещает второй массив, после чего j указывает на right. Затем в процессе слияния (третий цикл for) наибольший элемент служит служебной меткой независимо от того, в каком файле он находится. Внутренний цикл этой программы достаточно короткий (сравнение, перенос в RES, увеличение значений i или j на единицу, увеличение на единицу и проверка значения k).

 


Дата добавления: 2015-08-17; просмотров: 147 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Алгоритм сортировки слиянием| Усовершенствования базового алгоритма

mybiblioteka.su - 2015-2024 год. (0.006 сек.)