🤪 Sắp Xếp Tăng Giảm 🤪

Viết chức năng sắp xếp các số trong mảng

Theo thứ tự tăng hoặc giảm. Bằng phương pháp tự viết và có sẵng nhé.
js_masterGiải Thuật
cau-truc-du-lieu-va-giai-thuat.jpg

Chào các bạn

Trong bài viết này mình sẽ hướng dẫn các bạn bài tập.

Viết chức năng sắp xếp các số trong mảng theo thứ tự tăng hoặc giảm. Bằng phương pháp tự viết và có sẵng nhé.

Bắt đầu nào

Giải thuật

Để cho các bạn dể hình dung mình sẽ viết từng ví dụ nhỏ rồi ghép nó lại thành ví dụ hoàn chỉnh nhé.

  1. Tạo mảng số

Đơn nhiên ở đâu cũng vậy. Chúng ta phải có dữ liệu mới làm được. Dử liệu ở đây có thể nhập hoặc từ server hoặc ở đâu đó. Ví dụ này thì dữ liệu mình tự khai báo trước cho nó.

1let arr = [1, 3, 2, 5, -1, 400, -9, 30];

Như vậy là chúng ta đã có dữ liệu. Tiếp theo chúng ta cần làm là.

  1. Viết chức năng

Chức năng này đơn giản chỉ là thực hiện hành động sắp xếp. Nên chúng ta viết tên chức năng theo đúng hành động nó làm nhé.

1function sapXepTang(arr) {
2    for (let i = 0; i < arr.length; i++) {
3        for (let j = 0; j < arr.length; j++) {
4            if (arr[i] < arr[j]) {
5                let bienTam = arr[i];
6                arr[i] = arr[j];
7                arr[j] = bienTam;
8            }
9        }
10    }
11    console.log(arr);
12}

Chức năng của chúng ta hiện tại chỉ sắp xếp và log nó luôn. Nên mình không cần phải trả về gì cả.

  1. Gọi chức năng

Việc gọi chức năng thì củng không có gì khó. Chỉ cần gọi như thế này.

1sapXepTang(arr);

Cuối cùng chúng ta ghép tất cả các ví dụ trên thành một ví dụ hoàn chỉnh.

Ví dụ hoàn chỉnh.

1let arr = [1, 3, 2, 5, -1, 400, -9, 30];
2
3function sapXepTang(arr) {
4    for (let i = 0; i < arr.length; i++) {
5        for (let j = 0; j < arr.length; j++) {
6            if (arr[i] < arr[j]) {
7                let bienTam = arr[i];
8                arr[i] = arr[j];
9                arr[j] = bienTam;
10            }
11        }
12    }
13    console.log(arr);
14}
15
16sapXepTang(arr); // [-9, -1, 1, 2, 3, 5, 30, 400]

Hiện tại thì chức năng chúng ta gọi đã chạy và đã log ra kết quả như bạn thấy như ví dụ trên.

Bây giờ chúng ta sắp xếp giảm thì như thế nào. Không có gì khó chúng ta chỉ cần đổi dấu <if thành dấu > và đồng thời đổi tên chức năng lại cho nó đúng với cách mà nó đang làm.

1let arr = [1, 3, 2, 5, -1, 400, -9, 30];
2
3function sapXepGiam(arr) {
4    for (let i = 0; i < arr.length; i++) {
5        for (let j = 0; j < arr.length; j++) {
6            if (arr[i] > arr[j]) {
7                let bienTam = arr[i];
8                arr[i] = arr[j];
9                arr[j] = bienTam;
10            }
11        }
12    }
13    console.log(arr);
14}
15
16sapXepGiam(arr); // [400, 30, 5, 3, 2, 1, -1, -9]

OK tất cả mọi thứ chạy như dự định nhưng đầu ra bây giờ đã khác.

Ở các ví dụ trên mình đang viết chức năng bằng cách mình làm. Đơn nhiên sẽ không thể nào bằng các phương pháp có sẵng được.

Phương pháp có sẵng

Làm việc với phương pháp có sẵng đơn nhiên sẽ ngon hơn cách chúng ta viết. Nhiệm vụ bây giờ chúng ta chỉ cần nhớ cách sài thôi.

1function sapSepTang(arr) {
2    let ketQua = arr.sort(function (a, b) {
3        if (a > b) {
4            return 1;
5        }
6        if (a < b) {
7            return -1;
8        }
9        return 0;
10    });
11
12    console.log(ketQua); // [-9, -1, 1, 2, 3, 5, 30, 400]
13}
14
15sapSepTang(arr);

Như các bạn có thể thấy nó cũng hoạt động như ý chúng ta. Nhưng bây giờ thì nhìn có vẽ đẹp hơn.

Chúng ta cũng có thể viết như thế này cho các bạn dễ hình dung.

1function sapSepTang(arr) {
2    function callBack(a, b) {
3        if (a > b) {
4            return 1;
5        }
6        if (a < b) {
7            return -1;
8        }
9        return 0;
10    }
11
12    let ketQua = arr.sort(callBack);
13
14    console.log(ketQua);
15}
16
17sapSepTang(arr); // [-9, -1, 1, 2, 3, 5, 30, 400]

Bây giờ nhìn có vẽ tường minh hơn đúng không các bạn.

Đơn nhiên chúng ta cũng có thể viết ra chức năng của chúng ta theo cách gọi các phương pháp có sẵng như vậy.

1let arr = [1, 3, 2, 5, -1, 400, -9, 30];
2
3function mySort(callBack) {
4    for (let i = 0; i < this.length; i++) {
5        for (let j = 0; j < this.length; j++) {
6            if (callBack(this[i], this[j])) {
7                let bienTam = this[i];
8                this[i] = this[j];
9                this[j] = bienTam;
10            }
11        }
12    }
13    return this;
14}
15
16Array.prototype.mySort = mySort; // Thêm nó vào nguyên mẫu
17
18function sapXepTang(arr) {
19    let ketQua = arr.mySort((a, b) => {
20        if (a < b) {
21            return true;
22        }
23        return false;
24    });
25    console.log(ketQua); // [-9, -1, 1, 2, 3, 5, 30, 400]
26}
27
28sapXepTang(arr);

Đó chỉ là ví dụ để các bạn hình dung thôi. Rồi về sau nhiều cái hay lắm. Đơn nhiên nếu học mà biết càng nhiều thì càng tôt.

Tổng kết

Trong bài viết này mình đã hướng dẫn các bạn làm bài tập nhỏ. Các bạn chịu khó xem ví dụ nhé.

  • giải thuật
  • sắp xếp
  • đếm
  • mảng
  • chuỗi

OFFJS.COM - Blog học tập giải trí - 🐲

Chia sẻ nhiều kiến thức thú vị trong lập trình cũng như cuộc sống.

Giới thiệu


Trang web này mình sẽ nói về kiến thức lập trình và cuộc sống mà các bạn mới học hay đang dự định học. Có một bước đi đầu đời vững chắc.

Hồ Quang Trí.jpg

Đi kèm với đó là những lý thuyết và các dòng code minh họa. Để các bạn dễ hình dung.

Đơn nhiên cũng không dễ dàng ngày một ngày hai mà học hết được.

Học Tập Là Một Con Đường Dài Vô Tận

Nó sẽ nuốt các bạn vô số thời gian nhưng bù lại khi đã biết thì mọi thứ thật là tuyệt.

1console.log("Hồ Quang Trí");

Nếu có ai nói bạn học lập trình trong vòng 3 đến 6 tháng thì mình xin nói thật không bao giờ có chuyện đó nhé.

Chúc các bạn thành công.

Chân trang

phone-toan-phat.png

0353210168

address-toan-phat.png

Việt Nam