Ứng dụng giải thuật sắp xếp
Trộn 2 dãy (kỹ thuật 2 con trỏ)
Nộp bàiPoint: 1
Cho 2 dãy A và B đã sắp xếp tăng dần. Bạn hãy thực hiện trộn 2 dãy A và B thành 1 dãy C cũng sắp xếp tăng dần.
Ràng buộc: Ràng buộc: ~1 \leq N \leq 2.10^6~; ~-10^6 \leq A[i], B[i] \leq 10^6~
Input:
5
1 3 5 6 9
3
2 7 8
Output:
1 2 3 5 6 7 8 9
Trộn 2 mảng
Nộp bàiPoint: 1
Cho hai mảng đã được sắp xếp A[], B[] gồm N và M phần tử theo thứ tự và số K. Nhiệm của bạn là tìm phần tử ở vị trí số K sau khi trộn hai mảng để nhận được một mảng sắp xếp.
Đầu vào: Dòng đầu tiên chứa 3 số N, M, K; Dòng thứ 2 chứa N số nguyên của mảng A[] Dòng thứ 3 chứa M số nguyên của mảng B[]
Ràng buộc: 1 <= N,M <= 10^4; 1 <= K <= N + M; 1 <= A[], B[] <= 10^6
Đầu ra: In ra đáp án của bài toán
Input:
7 9 14
4 6 7 9 10 10 10
1 1 2 5 7 8 8 9 10
Output:
10
Trộn 2 dãy và sắp xếp (sắp xếp)
Nộp bàiPoint: 1
Cho hai dãy số nguyên dương A và B. Hãy trộn hai dãy với nhau sao cho dãy A được đưa vào các vị trí có chỉ số chẵn, dãy B được đưa vào các vị trí có chỉ số lẻ. Đồng thời, dãy A được sắp xếp tăng dần, còn dãy B được sắp xếp giảm dần. (Chú ý: chỉ số tính từ 0)
Định dạng đầu vào: Dòng đầu tiên ghi số n là số lượng phần tử của 2 dãy. Dòng tiếp theo ghi n số nguyên dương của dãy A. Dòng tiếp theo ghi n số nguyên dương của dãy B.
Ràng buộc: 1≤n≤10^5; 1 ≤ ai,bi ≤ 10^9
Định dạng đầu ra: In ra kết quả theo yêu cầu của bài toán
Input:
4
4 2 7 1
5 6 2 8
Output:
1 8 2 6 4 5 7 2
Sắp xếp dãy số thực
Nộp bàiPoint: 1
Xây dựng chương trình nhập vào một mảng các số thực (kiểu double) D gồm N phần tử, sau đó sắp xếp mảng đó theo thứ tự giảm dần.
Ràng buộc ~0 < N \leq 10^6~, ~-10^6 \leq D[i] \leq 10^6~
Input:
5
1.3 0.8 7.2 6.7 2.5
Output:
7.2 6.7 2.5 1.3 0.8
Sắp xếp nổi bọt (bubble sort)
Nộp bàiPoint: 1
Nhập vào một mảng A gồm N số nguyên. In ra các bước của thuật toán sắp xếp đổi chỗ trực tiếp.
Ràng buộc: ~0 < N \leq 10^6~, ~-10^6 \leq A[i] \leq 10^6~
Input:
4
5 7 3 2
Output:
Buoc 1: 2 5 7 3
Buoc 2: 2 3 5 7
Buoc 3: 2 3 5 7
Sắp xếp chọn (selection sort)
Nộp bàiPoint: 1
Nhập vào một mảng A gồm N số nguyên. In ra các bước của thuật toán sắp xếp chọn.
Ràng buộc: ~0 < N \leq 10^6~, ~-10^6 \leq A[i] \leq 10^6~
Input:
4
5 7 3 2
Output:
Buoc 1: 2 7 3 5
Buoc 2: 2 3 7 5
Buoc 3: 2 3 5 7
Sắp xếp chèn (insertion sort)
Nộp bàiPoint: 1
Nhập vào một mảng A gồm N số nguyên. In ra các bước của thuật toán sắp xếp chèn.
Ràng buộc: ~0 < N \leq 10^6~, ~-10^6 \leq A[i] \leq 10^6~
Input:
4
5 7 3 2
Output:
Buoc 0: 5
Buoc 1: 5 7
Buoc 2: 3 5 7
Buoc 3: 2 3 5 7
Sắp xếp đổi chỗ trực tiếp
Nộp bàiPoint: 1
Nhập vào một mảng A gồm N số nguyên. In ra các bước của thuật toán sắp xếp đổi chỗ trực tiếp để sắp xếp mảng theo thứ tự tăng dần.
Ràng buộc: ~0 < N \leq 10^6~, ~-10^6 \leq A[i] \leq 10^6~
Input:
4
5 7 3 2
Output:
Buoc 1: 2 7 5 3
Buoc 2: 2 3 7 5
Buoc 3: 2 3 5 7
Sắp xếp gộp (merge sort)
Nộp bàiPoint: 1
Cho mảng A có N phần tử, hãy sắp xếp lại mảng A theo thứ tự tăng dần sử dụng thuật toán sắp xếp gộp Merge Sort
Ràng buộc: ~0 < N \leq 10^6~, ~-10^6 \leq A[i] \leq 10^6~
Input 01:
7
1 5 2 4 10 9 8
Output 01:
1 2 4 5 8 9 10
Input 02:
14
10 8 9 12 11 3 1 2 7 5 6 2 3 4
Output 02:
1 2 2 3 3 4 5 6 7 8 9 10 11 12
Sắp xếp nhanh (quick sort) với chốt là phần tử đầu tiên (bên trái)
Nộp bàiPoint: 1
Cho mảng A có N phần tử, hãy sắp xếp lại mảng A theo thứ tự tăng dần sử dụng thuật toán sắp xếp nhanh quick sort với chốt (pivot) là phần tử đầu tiên
Ràng buộc: ~0 < N \leq 10^6~, ~-10^6 \leq A[i] \leq 10^6~
Input 01:
7
1 5 2 4 10 9 8
Output 01:
1 2 4 5 8 9 10
Input 02:
14
10 8 9 12 11 3 1 2 7 5 6 2 3 4
Output 02:
1 2 2 3 3 4 5 6 7 8 9 10 11 12
Sắp xếp nhanh (quick sort) với chốt là phần tử cuối cùng (bên phải)
Nộp bàiPoint: 1
Cho mảng A có N phần tử, hãy sắp xếp lại mảng A theo thứ tự tăng dần sử dụng thuật toán sắp xếp nhanh quick sort với chốt (pivot) là phần tử cuối cùng
Ràng buộc: ~0 < N \leq 10^6~, ~-10^6 \leq A[i] \leq 10^6~
Input 01:
7
1 5 2 4 10 9 8
Output 01:
1 2 4 5 8 9 10
Input 02:
14
10 8 9 12 11 3 1 2 7 5 6 2 3 4
Output 02:
1 2 2 3 3 4 5 6 7 8 9 10 11 12
Sắp xếp các xâu theo độ dài
Nộp bàiPoint: 1
Cho một danh sách gồm N xâu ký tự, hãy sắp xếp lại các xâu đó theo thứ tự xâu nào dài hơn sắp xếp lên trước, nếu các xâu có độ dài bằng nhau thì xâu nào có thứ tự từ điển nhỏ hơn sẽ được sắp xếp lên trước.
Ràng buộc: ~0 < N \leq 10^6~
Input 01:
3
ab abcde abc
Output 01:
abcde abc ab
Input 02:
6
abc efghi abcdef abcde 123 abc1234
Output 02:
abc1234 abcdef abcde efghi 123 abc
Sắp xếp mảng ký tự
Nộp bàiPoint: 1
Xây dựng chương trình nhập vào một mảng gồm N xâu ký tự, sau đó sắp xếp các xâu ký tự đó theo thứ thự giảm dần (theo bảng chữ cái A, B, C)
Ràng buộc: ~0 < N \leq 10^6~
Input 01:
4
abc abd cad bcd
Output 01:
cad bcd abd abc
Input 02:
6
hoc cong nghe that tuyet voi
Output 02:
voi tuyet that nghe hoc cong
Sắp xếp tên lớp
Nộp bàiPoint: 1
Xây dựng chương trình nhập vào danh sách lớp gồm N lớp trong trường, sau đó sắp xếp danh sách lớp đó theo thứ tự tăng dần, ví dụ: 7A1, 6A2, 8A3, 6A4 thì sau khi sắp xếp sẽ là 6A2, 6A4, 7A1, 8A3
Ràng buộc: ~0 < N \leq 10^6~
Input:
4
7A1 6A2 8A3 6A4
Output:
6A2 6A4 7A1 8A3
Số xuất hiện nhiều nhất trong mảng (sắp xếp)
Nộp bàiPoint: 1
Cho một mảng A các số nguyên gồm N phần tử. In ra số xuất hiện nhiều nhất trong mảng và số lần xuất hiện. Nếu có nhiều số xuất hiện bằng nhau thì in ra số nhỏ hơn.
Ràng buộc: ~1 \leq N \leq 2.10^5~; ~-10^9 \leq A[i] \leq 10^9~
input:
5
1 2 2 1 3
Output:
1 2