|
| 1 | +# Sorting (Vietnamese) |
| 2 | + |
| 3 | +Sắp xếp là một lĩnh vực quan trọng trong lập trình, hầu hết các ngôn ngữ lập |
| 4 | +trình đều có sẵn các hàm phục vụ cho việc tìm kiếm, sắp xếp. Theo Donald. Knuth |
| 5 | +thì 40% lượng công việc tính toán của máy tính là dành cho sắp xếp. Trong các |
| 6 | +thuật toán sắp xêp hiện nay thì Quick Sort là thuật toán cho độ phức tạp về thời |
| 7 | +gian (Time Complexity) trung bình tốt nhất, chúng ta sẽ bàn kỹ hơn ở bài tổng |
| 8 | +kết. |
| 9 | + |
| 10 | +Một lưu ý là dữ liệu của chúng ta có thể được nằm ở nhiều nơi trong một hệ thống |
| 11 | +hoàn chỉnh, có thể ở database, ở localStorage trong trình duyệt, ở redis cache, |
| 12 | +... nên việc sắp xếp có thể cần thêm một số bước chuẩn hóa, làm sạch dữ liệu... |
| 13 | +nhưng ở đây ta chỉ nói đến trường hợp toàn bộ dữ liệu cần sắp xếp là cùng kiểu và phải được đưa |
| 14 | +vào bộ nhớ chính. |
| 15 | + |
| 16 | +## I. Bài toán |
| 17 | + |
| 18 | +Cho mảng A bao gồm N phần tử cần được sắp xếp a[1], a[2], ..., a[n]. Khi đó, ta |
| 19 | +có thể sắp xếp mảng A lại theo thứ tự tăng dần: |
| 20 | + |
| 21 | +a[1] <= a[2] <= ... <= a[n] |
| 22 | + |
| 23 | +Hoặc theo thứ tự giảm dần: |
| 24 | + |
| 25 | +a[1] >= a[2] >= ... >= a[n] |
| 26 | + |
| 27 | +Do đặc điểm của mảng là cho phép ta duyệt từ trái (left) sang phải hoặc từ phải |
| 28 | +(right) sang trái nên bài toán sắp xếp tăng dần có thể xem là tương đương với |
| 29 | +bài toán sắp xếp giảm dần, chỉ ngược về vị trí ban đầu của phép duyệt. |
| 30 | + |
| 31 | +Trong bài giảng này, ta sẽ tìm hiểu lần lượt các ý tưởng sắp xếp cũng như cài |
| 32 | +đặt tất cả các thuật toán sắp xếp. Mặc dù các hàm sắp xếp của chúng ta có vẻ thừa thãi, việc cài đặt lại các |
| 33 | +thuật toán này giúp chúng ta hiểu rõ hơn về mặt ý tưởng cũng như các kỹ thuật |
| 34 | +cài đặt quan trọng như đệ quy, đánh dấu, dãy tạm, chia để trị, ... |
| 35 | + |
| 36 | +## II. Sắp xếp nổi bọt (Buble Sort) |
| 37 | + |
| 38 | +<i>Bài toán tìm phần tử nhỏ (lớn) thứ K của mảng:</i> Cho một mảng A gồm N phần |
| 39 | +tử, tìm phần tử nhỏ thứ K (K <= N) của mảng đó. |
| 40 | + |
| 41 | +Ý tưởng của bài này khá đơn giản, nhưng nó cung cấp cho chúng ta một |
0 commit comments