Skip to content

Commit 4208bdb

Browse files
committed
Quick Sort, Bubble Sort
1 parent 52ce363 commit 4208bdb

File tree

5 files changed

+134
-0
lines changed

5 files changed

+134
-0
lines changed

Sorting/BubleSort.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
var BubbleSort = function (array) {
2+
if (array.length === 0 || array.length === 1)
3+
return array;
4+
for (var i = 0; i < array.length - 1; i++) {
5+
for (var j = array.length - 1; j >= i + 1; j--) {
6+
if (array[j - 1] > array[j]) {
7+
var tmp = array[j];
8+
array[j] = array[j - 1];
9+
array[j - 1] = tmp;
10+
}
11+
}
12+
}
13+
return array;
14+
};
15+
console.log(BubbleSort([1, 2, -4, 3, 0, 20, 15]));

Sorting/BubleSort.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
const BubbleSort = (array: number[]) => {
2+
if (array.length === 0 || array.length === 1) return array;
3+
for (let i = 0; i < array.length - 1; i++) {
4+
for (let j = array.length - 1; j >= i + 1; j--) {
5+
if (array[j - 1] > array[j]) {
6+
let tmp = array[j];
7+
array[j] = array[j - 1];
8+
array[j - 1] = tmp;
9+
}
10+
}
11+
}
12+
return array;
13+
};
14+
15+
console.log(BubbleSort([1, 2, -4, 3, 0, 20, 15]));

Sorting/QuickSort.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
var QuickSort = function (L, H, array) {
2+
var _a;
3+
if (array.length === 0 || array.length === 1)
4+
return array;
5+
var i = L;
6+
var j = H;
7+
var mid = array[L + Math.floor((H - L) / 2)];
8+
do {
9+
while (array[i] < mid) {
10+
i++;
11+
}
12+
while (array[j] > mid) {
13+
j--;
14+
}
15+
if (i <= j) {
16+
_a = [array[j], array[i]], array[i] = _a[0], array[j] = _a[1];
17+
i++;
18+
j--;
19+
}
20+
} while (i <= j);
21+
if (L < j) {
22+
QuickSort(L, j, array);
23+
}
24+
if (i < H) {
25+
QuickSort(i, H, array);
26+
}
27+
return array;
28+
};
29+
var arr = [1, 2, -4, 3, 0, 20, 15];
30+
console.log(QuickSort(0, arr.length - 1, arr));

Sorting/QuickSort.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
const QuickSort = (L, H: number, array: number[]) => {
2+
if (array.length === 0 || array.length === 1) return array;
3+
let i: number = L;
4+
let j: number = H;
5+
let mid: number = array[L + Math.floor((H - L) / 2)];
6+
do {
7+
while (array[i] < mid) {
8+
i++;
9+
}
10+
11+
while (array[j] > mid) {
12+
j--;
13+
}
14+
15+
if (i <= j) {
16+
[array[i], array[j]] = [array[j], array[i]];
17+
i++;
18+
j--;
19+
}
20+
} while (i <= j);
21+
22+
if (L < j) {
23+
QuickSort(L, j, array);
24+
}
25+
if (i < H) {
26+
QuickSort(i, H, array);
27+
}
28+
29+
return array;
30+
};
31+
32+
const arr: number[] = [1, 2, -4, 3, 0, 20, 15];
33+
console.log(QuickSort(0, arr.length - 1, arr));

Sorting/README.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
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

Comments
 (0)