So sánh không dùng vòng lặp năm 2024

Đếm số phép so sánh và hoán vị theo từng vòng, và tổng kết của thuật toán sau [n là số phần tử của mảng a]:

void f[int a[], int n] { int i, j; for [int i = 0; i < n-1; i++] { for [int j = i; j < n; j++] { if [a[i] < a[j]] { int temp = a[i]; a[i] = a[j]; a[j] = temp; } } } }

Đây là một dạng của thuật toán sắp xếp, cụ thể là Sắp xếp chọn [Selection Sort]. Dưới đây là phân tích số phép hoán vị và phép so sánh:

  1. Phép so sánh:
  2. Vòng lặp thứ nhất chạy từ i=0 đến n-1.
  3. Vòng lặp thứ hai bên trong vòng lặp thứ nhất chạy từ j=i+1 đến n.

Vì vậy, số tổng số phép so sánh sẽ là [n-1] + [n-2] + ... + 2 + 1 = n[n-1]/2. Đây cũng chính là công thức của tổ hợp chập 2 của n.

  1. Phép hoán vị:

Ở mỗi lần lặp, nếu phần tử a[i] nhỏ hơn a[j] thì sẽ thực hiện hoán vị. Trong trường hợp xấu nhất [mảng đầu vào sắp xếp giảm dần], mỗi vòng lặp của 'j' sẽ phải thực hiện một hoán vị.

Tương tự như số phép so sánh, số phép hoán vị cũng sẽ là n[n-1]/2.

Nhưng nếu đầu vào là một mảng đã sắp xếp tăng dần [trường hợp tốt nhất], thì không cần phép hoán vị nào cả.

Nói chung, số phép hoán vị phụ thuộc vào đầu vào, nên không thể xác định chính xác cho mọi trường hợp.

Hãy nhớ rằng, đôi khi lựa chọn thuật toán tối ưu phụ thuộc nhiều vào dữ liệu đầu vào. Nhưng không sao cả, nếu bạn gặp khó khăn trong việc hiểu các loại thuật toán, ghé thăm trituenhantao.io để tìm hiểu thêm. Đừng để một hoá đơn phức tạp khiến bạn mất hứng thú với lập trình!

Trong bài viết này, ta tiếp tục tìm hiểu các khía cạnh khác trong vòng lặp của Java bao gồm: Vòng lặp for lồng, vòng lặp do-while, đồng thời tìm hiểu xem khi nào sử dụng for, khi nào sử dụng while, cuối cùng ta làm quen về 2 keyword thường được sử dụng trong vòng lặp là break và continue.

Vòng lặp for lồng

Vòng lặp "for" lồng [nested for loop] trong Java là một cấu trúc lặp bên trong một vòng lặp khác. Điều này cho phép bạn thực hiện các lặp lồng nhau, tức là một vòng lặp nằm bên trong một vòng lặp khác. Vòng lặp "for" lồng thường được sử dụng để thực hiện lặp lại qua tập hợp đa chiều, mảng hai chiều hoặc thực hiện các phép toán lặp lồng nhau khác.

Cấu trúc cơ bản của vòng lặp "for" lồng trong Java có thể được thể hiện như sau:

for [int i = 0; i < outerLimit; i++] {
    // code thực thi trong vòng lặp ngoài
    for [int j = 0; j < innerLimit; j++] {
        // code thực thi trong vòng lặp bên trong
    }
}

Trong trường hợp này:

  • public class NestedForLoopExample {

    public static void main[String[] args] {  
        for [int i = 1; i 

Chủ Đề