Упорядоченные списки А и В длин М и N сливаются в один упорядоченный список С длины М+N, если каждый элемент из А и В входит в С точно один раз. Так, слияние списков А= и В= из 5 и 4 элементов дает в качестве результата список С= из 9 элементов.
Для слияния списков А и В список С сначала полагается пустым, а затем к нему последовательно приписывается первый узел из А или В, оказавшийся меньшим и отсутствующий в С.
Составим функцию для слияния двух упорядоченных, расположенных рядом частей массива s. Параметром этой функции будет исходный массив s с выделенными в нем двумя расположенными рядом упорядоченными подмассивами: первый с индекса low до индекса low+l, второй с индекса low+l+1 до индекса up, где переменные low, l, up указывают месторасположения подмассивов. Функция merge осуществляет слияние этих подмассивов, образуя на их месте упорядоченный массив с индексами от low до up (см. рис.28).
/* слияние списков */ double *merge(double *s, int low, int up, int l) { double *b,*c,v; int i,j,k; b=calloc(l,sizeof(double)); c=calloc(up+1-l,sizeof(double)); for(i=low;is[up-1]) ? (s[low+l-1]+1) : (s[up-1]+1))); i=(j=0); k=low; while(b[i]
Рис.28. Схема движения индексов при слиянии списков.