Nhập N và dãy số nguyên A= a1... an Hãy sắp xếp dãy số nguyên A thành dãy không tăng

2 câu trả lời

Theo bình luận của bạn thì mình thấy bạn cần cách sắp xếp có độ phức tạp O(n), mình sẽ viết cho bận một chương trình quicksort (nhanh, có thể sử dụng có mảng lớn)

type
     tlist = array[1..max] of longint;
procedure qsortAB(var a,b : tlist);
    procedure sort(l,r: longint);
      var
         i,j,x,y: longint;
      begin
         i:=l;
         j:=r;
         x:=a[(l+r) div 2];
         while(i<=j) do
           begin
                while a[i]<x do
                    inc(i);
                while x<a[j] do
                    dec(j);
                if not(i>j) then
                    begin
                        y:=a[i]; a[i]:=a[j]; a[j]:=y;
                        y:=b[i]; b[i]:=b[j]; b[j]:=y;
                        inc(i);
                        j:=j-1;
                    end;
            end;
         if l<j then
           sort(l,j);
         if i<r then
           sort(i,r);
      end;

    begin
       sort(1,max);
    end;

program Min;
uses crt;
var A:array[1..1000] of integer;
    N,M,i,j,tam:integer;
begin
   clrscr;
   writeln('Nhap N: '); readln(N);
   for i:=1 to N do 
   begin
      writeln('A[',i,']: '); 
      readln(A[i]);
   end;
   for j:=N downto 2 do
   for i:=1 to j-1 do if A[i]<A[i+1] then
   begin
      tam:=A[i];
      A[i]:=A[i+1];
      A[i+1]:=tam;
   end;
   write('Day da duoc sap xep la: ');
   for i:=1 to n do write(A[i]:4);
   readln
end.
    

Em tham khảo nha.

Câu hỏi trong lớp Xem thêm