Алексей Леонов-Вендровский
Алексей Леонов-Вендровский | Репутация: 100 (Кандидат) 8 июня 2008 в 20:22
Нужен алгоритм inplace merge для одного массива, состоящего из двух отсортированных подмассивов, за линейное время (О(n))
Alexander Sudarikov
Alexander Sudarikov | Репутация: 103 (Кандидат) 9 июня 2008 в 19:59


void inplace_merge(int* start, int* middle, int* end)
{
int *mt = middle;
while ( start < middle )
{
if ( *start > *middle )
{
int v = *start;
mt = middle + 1;
swap( *start, *middle );
while ( mt < end && v > *mt )
{
mt[-1] = *mt;
mt++;
}
mt[-1] = v;
}
start++;
}
}

или используйте STL.