Vous êtes sur la page 1sur 2

Christopher Perrin: 1021588 1

Algorithmen und Datenstrukturen – Mi 14-16 Uhr

2. Übung

Aufgabe 2.1:
a) Falsch: ( ) ( )
b) Richtig ( )

Aufgabe 2.3:
function merge_sort(field)
return divide(field, 1, field.length)
end function

function divide(field, start, end)


if end – start <= 1
return field[start:end]
endif
middle = (end – start) / 2 + start
return merge(divide(field, start, middle),
divide(field, middle, end))
end function

function merge(fieldA, fieldB)


counterA = 1
counterB = 1
counterC = 1
fieldC[1...fieldA.length + fieldB.length]
while fieldA.length >= counterA or fieldB.length >= counterB
if(fieldA[counterA] <= fieldB[counterB])
fieldC[counterC] = fieldA[counterA]
counterA++
else
fieldC[counterC] = fieldB[counterB]
counterB++
endif
counterC++
endwhile
for i from counterA to fieldA.length
fieldC[counterC] = fieldA[counterA]
counterC++
endfor
for i from counterB to fieldB.length
fieldC[counterC] = fieldB[counterB]
counterC++
endfor
return fieldC
end function
Christopher Perrin: 1021588 2
Algorithmen und Datenstrukturen – Mi 14-16 Uhr

Aufgabe 2.4
function merge_sort(field)
size = 1
tmp[1... field.length / 2]
while size <
mid = field.length – 1 - size
while mid >= 1
left = mid – size + 1
if left < 0
left = 0
endif
right = mid + size
tmp = merge(field[left:mid-1], field[mid:right])
field[left:right] = tmp
mid = mid – (size + size)
endwhile
size = size + size
endwhile
return divide(field, 1, field.length)
end function

function merge(fieldA, fieldB)


counterA = 1
counterB = 1
counterC = 1
fieldC[1...fieldA.length + fieldB.length]
while fieldA.length >= counterA or fieldB.length >= counterB
if(fieldA[counterA] <= fieldB[counterB])
fieldC[counterC] = fieldA[counterA]
counterA++
else
fieldC[counterC] = fieldB[counterB]
counterB++
endif
counterC++
endwhile
for i from counterA to fieldA.length
fieldC[counterC] = fieldA[counterA]
counterC++
endfor
for i from counterB to fieldB.length
fieldC[counterC] = fieldB[counterB]
counterC++
endfor
return fieldC
end functioni

Anmerkungen: Field[start:end] ist eine aus python geliehener syntax, der einen Teil des Felds von „start“ bis „end“ zurückgibt.
fieldA[start:end] = fieldB[0...end-start] Schreibt den inhalt von einem Feld in ein andres Feld von Position „start“ bis „end“

Vous aimerez peut-être aussi