Problem

3 /7


Sắp xếp chèn

Theory Click to read/hide

Sắp xếp chèn

Sắp xếp chèn (Sắp xếp chèn) —  ;thuật toán sắp xếp trong đó các phần tử của chuỗi đầu vào được tra cứu cùng một lúc và mỗi phần tử mới đến được đặt ở vị trí thích hợp trong số các phần tử đã sắp xếp trước đó.


Sắp xếp chèn – nó là một thuật toán rất đơn giản nhưng không hiệu quả, tuy nhiên có một số lợi thế cụ thể khiến nó trở nên phù hợp ngay cả sau khi nhiều thuật toán khác nói chung hiệu quả hơn đã được phát triển.

Với sắp xếp chèn, bạn không cần phải sắp xếp toàn bộ mảng trước khi sắp xếp. Thuật toán có thể nhận từng phần tử một trong quá trình sắp xếp. Điều này rất hữu ích nếu chúng ta cần thêm nhiều phần tử hơn trong quá trình sắp xếp. Thuật toán sẽ chèn phần tử mới vào đúng vị trí mà không cần "thực hiện lại" sắp xếp toàn bộ mảng.

Sắp xếp chèn có thể được sử dụng trong thực tế do tính hiệu quả của nó trên các tập dữ liệu nhỏ (~10 phần tử).

Vấn đề là thế này: có một phần của mảng đã được sắp xếp, và bạn muốn chèn các phần tử còn lại của mảng vào phần đã sắp xếp mà vẫn giữ nguyên trật tự. Để làm điều này, ở mỗi bước của thuật toán, chúng ta chọn một trong các phần tử dữ liệu đầu vào và chèn nó vào vị trí mong muốn trong phần đã được sắp xếp của mảng, cho đến khi toàn bộ tập dữ liệu đầu vào được sắp xếp. Phương pháp chọn phần tử tiếp theo từ mảng đầu vào là tùy ý, nhưng thông thường (và để có được thuật toán sắp xếp ổn định), các phần tử được chèn theo thứ tự xuất hiện của chúng trong mảng đầu vào.

Thuật toán thực hiện thuật toán này
// Phần tử null được coi là một dãy đã được sắp xếp. // Do đó, vòng lặp bắt đầu từ 1 LOOP FOR I=1 TO N-1 BƯỚC 1 X=A[I] J=tôi WHEN J>0 AND A[J-1]>X //đang tìm chỗ chèn TRAO ĐỔI A[J],A[J-1] J=J-1 KẾT THÚC A[J]=X TIẾP THEO TÔI Độ phức tạp tính toán: \(\displaystyle O(n^{2})\).

Problem

Cần sắp xếp mảng theo thứ tự không giảm dần bằng cách sử dụng phương thức "chèn".

Đầu vào 
Dòng đầu tiên chứa một số tự nhiên N không quá 1000 – kích thước mảng. Dòng thứ hai đặt N số – phần tử mảng (số nguyên không vượt quá 1000 về giá trị tuyệt đối).

Dấu ấn 
Xuất mảng kết quả.
 
Ví dụ
<đầu>
# Đầu vào Đầu ra
1 5
5 4 3 2 1
1 2 3 4 5