Trang chủ Tin Học Lớp 10 Nhập N và dãy số nguyên A= a1... an Hãy...

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 câu hỏi 181460 - hoctapsgk.com

Câu hỏi :

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

Lời giải 1 :

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.

Thảo luận

-- vậy có cách sắp xếp nào để giảm độ phức tạp xuống còn O(n) không ạ?
-- Mình chưa hiểu lắm, bạn có thể nói chi tiết hơn được không?
-- theo như chương trình bạn đã viết thì 2 đoạn for..do được lồng vào nhau,từ đó khiến độ phức tạp của thuật toán là O(n^2) cái mình hỏi là bạn có ct nào khác mà chỉ riêng một for..do hay 2 đoạn for..do mà không lồng nhau thôi ạ
-- Để mình xem thử nha.

Lời giải 2 :

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;

Bạn có biết?

Tin học, tiếng Anh: informatics, tiếng Pháp: informatique, là một ngành khoa học chuyên nghiên cứu quá trình tự động hóa việc tổ chức, lưu trữ, xử lý và truyền dẫn thông tin của một hệ thống máy tính cụ thể hoặc trừu tượng (ảo). Với cách hiểu hiện nay, tin học bao hàm tất cả các nghiên cứu và kỹ thuật có liên quan đến việc mô phỏng, biến đổi và tái tạo thông tin.

Nguồn : Wikipedia - Bách khoa toàn thư

Tâm sự 10

Lớp 10 - Năm thứ nhất ở cấp trung học phổ thông, năm đầu tiên nên có nhiều bạn bè mới đến từ những nơi xa hơn vì ngôi trường mới lại mỗi lúc lại xa nhà mình hơn. Được biết bên ngoài kia là một thế giới mới to và nhiều điều thú vị, một trang mới đang chò đợi chúng ta.

Nguồn : ADMIN :))

Copyright © 2021 HOCTAP247