Пусть есть массив с данными data[n], часть данных помечена как пустые в отсортированном массиве ihole[m], m<n. Например data=[x0,x1,x2,x3], holes[1,3] — т.е. на месте x1 и x3 хранится мусор.
Необходимо дефрагментировать массив data, что бы на место мусора перемещались полезные данные из конца массива, а n-=m. Последовательный алгоритм тривиален:
for i in range(m):
src = n-i-1
dst = ihole[m-i-1]
if src>dst: data[dst] = data[src]