18/03/2021, 09:38

Bài tập Java - Sắp xếp chèn (Insertion Sort) trong Java

Bài tập Java - Sắp xếp chọn (Selection Sort) trong Java Nội dung chính Bài tập Java - Sắp xếp chèn (Insertion Sort) trong Java Lời giải Bài tập Java - Sắp xếp chèn (Insertion Sort) trong Java Đề bài : Viết chương trình Java sắp xếp một dãy số theo thứ ...

Bài tập Java - Sắp xếp chọn (Selection Sort) trong Java

Nội dung chính

  • Bài tập Java - Sắp xếp chèn (Insertion Sort) trong Java
  • Lời giải

Bài tập Java - Sắp xếp chèn (Insertion Sort) trong Java

Đề bài: Viết chương trình Java sắp xếp một dãy số theo thứ tự tăng dần bằng thuật toán chèn (Insertion Sort).


Lời giải

Sắp xếp chèn là một giải thuật sắp xếp dựa trên so sánh in-place. Ở đây, một danh sách con luôn luôn được duy trì dưới dạng đã qua sắp xếp. Sắp xếp chèn là chèn thêm một phần tử vào danh sách con đã qua sắp xếp. Phần tử được chèn vào vị trí thích hợp sao cho vẫn đảm bảo rằng danh sách con đó vẫn sắp theo thứ tự.

Với cấu trúc dữ liệu mảng, chúng ta tưởng tượng là: mảng gồm hai phần: một danh sách con đã được sắp xếp và phần khác là các phần tử không có thứ tự. Giải thuật sắp xếp chèn sẽ thực hiện việc tìm kiếm liên tiếp qua mảng đó, và các phần tử không có thứ tự sẽ được di chuyển và được chèn vào vị trí thích hợp trong danh sách con (của cùng mảng đó).

Giải thuật này không thích hợp sử dụng với các tập dữ liệu lớn khi độ phức tạp trường hợp xấu nhất và trường hợp trung bình là Ο(n2) với n là số phần tử.

Dưới đây là chương trình Java để giải bài sắp xếp chèn (Insertion Sort) trong Java:


package vn.viettuts.array;

public class SapXepChen {

    public void insertionSort(int arr[]) {
        int valueToInsert;
        int holePosition;
        int i;

        // lap qua tat ca cac so
        for (i = 1; i < arr.length; i++) {

            // chon mot gia tri de chen
            valueToInsert = arr[i];

            // lua chon vi tri de chen
            holePosition = i;

            // kiem tra xem so lien truoc co lon hon gia tri duoc chen khong
            while (holePosition > 0 && arr[holePosition - 1] > valueToInsert) {
                arr[holePosition] = arr[holePosition - 1];
                holePosition--;
                System.out.println("Di chuyen phan tu: " + arr[holePosition]);
            }

            if (holePosition != i) {
                System.out.println(" Chen phan tu: " + valueToInsert 
                        + ", tai vi tri: " + holePosition);
                // chen phan tu tai vi tri chen
                arr[holePosition] = valueToInsert;
            }

            System.out.println("Vong lap thu " + i);
            display(arr);
        }
    }

    public void display(int arr[]) {
        int i;
        System.out.print("[");

        // Duyet qua tat ca phan tu
        for (i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }

        System.out.print("]
");
    }

    public static void main(String[] args) {
        // khoi tao mang arr
        int arr[] = { 6, 7, 0, 2, 8, 1, 3, 9, 4, 5 };

        SapXepChen sapXepChen = new SapXepChen();
        System.out.println("Mang du lieu dau vao: ");
        sapXepChen.display(arr);
        System.out.println("-----------------------------");
        sapXepChen.insertionSort(arr);
        System.out.println("-----------------------------");
        System.out.println("
Mang sau khi da sap xep: ");
        sapXepChen.display(arr);
    }
}

Chạy chương trình Java trên cho kết quả như sau:

Sắp xếp chèn (Insertion Sort) trong Java
Bài tập Java - Sắp xếp chọn (Selection Sort) trong Java
0