Hallo
Habe folgendes unter Pascal Programmiert jedoch soll das in C geschrieben werden kann mir einer helfen?
interface
type Value = integer;
VProc = procedure(v : Value);
List = ^ElemR;
ElemR = record
val : Value;
next : List;
end;
twoLists = record
l1 : List;
l2 : List;
end;
procedure insertend ( rec : list; var first,last : list );
function mixsort( var l : list ) : list;
function merge ( l1, l2 : list ) : list;
function mix ( l1, l2 : list ) : list;
function split(l : List) : twoLists;
function getLenght(l : List) : Value;
...
function getLenght(l : list):integer;
var counter : longint; // Variableninitialisation
finish : boolean;
begin
finish := false; // Endvariable auf false setzen
counter := 0; // Zählvariable auf 0 setzen
while(finish = false) do // solange Ende nicht erreicht
begin
if(tail(l) = nil) then finish := true else // Wenn aktuelles Elemement = letztes Element
l := tail(l); // Erstes Element entfernen und
counter := counter + 1; // die Zählvariable erhöhen
end; // while
getLenght := counter; // die Länge zurückgeben
end; //getLenght
procedure insertend ( rec : list; var first,last : list );
begin
if first = nil then first := rec else last^.next := rec;
last := rec;
end;
function merge( l1, l2 : list ) : list;
var first, last, temp : list;
begin
first := init;
last := init;
while l2 <> nil do
if l1 = nil then begin l1 := l2; l2 := nil end
else begin
if l2^.val > l1^.val then
begin temp := l1; l1 := l1^.next end
else begin temp := l2; l2 := l2^.next end;
temp^.next := nil;
insertend( temp, first, last )
end;
insertend( l1, first, last );
merge := first
end;
function mixsort( var l : list) : list;
var temp : list;
listen : twoLists;
n : integer;
begin
n := getLenght(l);
if (l = nil) then mixsort := nil else if n>1 then
begin
listen := split(l);
mixsort := merge( mixsort( listen.l1 ), mixsort( listen.l2 ));
end
else
begin
temp := l;
l := l^.next;
temp^.next := nil;
mixsort := temp;
end
end;
function mix (l1, l2: List) : List;
var tmplst : List;
begin
tmplst := merge(l1, l2);
mix := mixsort(tmplst);
end; // mix