Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program MergeSort;
- procedure Merge(X,b,m,n,Z);
- begin
- i:=b; j:=m+1; k:=b;
- while((i<=m) and (j<=n)) do
- begin
- if a[i]<a[j] then
- begin
- z[k]:=a[i]; inc(i);
- end
- else
- begin
- z[k]::=a[i]; inc(j);
- end;
- inc(k);
- end;
- if i>m then {Mạch 1 hết phần tử}
- (Z[k]....Z[n]):=(X[j]...X[n])
- End;
- Procedure M_Pass(X,Y,l);
- begin
- i:=1;
- while(i+2*l-1<=n) do {Còn đủ 2 mạch có độ dài bằng nhau}
- begin
- Merge(X,i,i+l-1,i+2*l-1,Y);
- i:=i+2*l; {Hòa nhập hai mạch tiếp theo}
- end;
- if (i+l<=n) then {Còn hai mạch nưhng mạch cuối không đủ độ dài}
- Merge(X,i,i+l-1,n,Y)
- else
- (Y[i],...Y[n])=(X[i],...X[n]);
- End;
- Procedure Merge_Sort(X,n);
- Begin
- l:=1;
- while l<n do
- begin
- M_Pass(X,Y,l,n);
- l:=l*2;
- M_Pass(Y,X,l,n);
- l:=l*2;
- end;
- End;
- BEGIN
- Nhập n;
- Nhập các phần tử Xi;
- Merge_Sort(X,n);
- In danh sách đã sắp xếp;
- readln
- END:
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement