Cần góp ý code quicksort

Thuật toán này em viết còn cần phải sửa đổi gì ạ , em cảm ơn ạ

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package newpackage;

/**
 *
 * @author Admin
 */
import Hocdelamgi.quick;
import java.util.Scanner;

public class quickSort {

    public static int divide(int[] arr, int r, int l) {
        int pivot = arr[r];
        int i = l;
        int j = r - 1;
        while (true) {
            while (arr[i] < pivot && i <= j) {
                i++;
            }
            while (arr[j] > pivot && i <= j) {
                j--;
            }
            if (l > r) {
                break;
            }

            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;

            i++;
            j--;

        }
        int temp = arr[i];
        arr[i] = arr[r];
        arr[r] = arr[i];

        return i;
    }

    public static void quick(int[] arr, int l, int r) {
        if (l > r) {
            int pivot = divide(arr, l, r);
            quick(arr, l, pivot - 1);
            quick(arr, pivot + 1, r);
        }
    }

    public static void display(int[] arr) {
        int n = arr.length;
        System.out.print("[");
        for (int i = 0; i < n; i++) {
            System.out.print(arr[i] + " ");
            System.out.println("]\n");
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.println("Nhập số lượng mảng : ");
        int n = sc.nextInt();
        int[] arr = new int[n];

        for (int i = 0; i < n; i++) {
            System.out.println("Phần tử mảng thứ " + i);
            arr[i] = sc.nextInt();
        }
         sc.close();
        System.out.println("Mảng trước khi sắp xếp : ");
        System.out.println("-----------------------");
        display(arr);
       

        quickSort(arr, 0, n - 1);
        divide(arr, 0, n - 1);

        System.out.println("Mảng sau khi được sắp xếp : ");
        System.out.println("--------------------------");
        display(arr);
    }

}

EDIT (@library): Tớ dùng markdown để format code của cậu, nên đừng xóa nó đi nhé!

Tớ có mấy điều muốn cậu sửa:

  1. Cậu nên format lại code của cậu.
    Nếu cậu không biết cách format code bằng IDE, cậu nên google nó.
  2. Cậu nên cho bọn tớ test làm cho bài này tung ra exception.
    Cậu đã nhập những gì vào rồi?
    Cậu có thể cho bọn tớ exception stacktrace của cậu được không?
  3. Cậu đã thử debug chưa? Nếu chưa, cậu nên debug trước.
    Cậu có thể tự tìm hiểu cách debug java trên IDE bằng google.
  4. Sử dụng markdown ở các post sau nhé!
3 Likes

Em cũng đã thử debug rồi nhma nó vẫn bị lỗi anh ơi

Debug là cách để cậu tìm ra nguyên nhân của lỗi. Nó không làm mất lỗi đi đâu :smile:
Cậu thử google cách debug từng dòng một trên IDE mà cậu đang dùng xem :smile:

4 Likes

À, mà cậu hình như quên không cho bọn tớ class Hocdelamgi.quick của cậu rồi. Tớ khá chắc là lỗi ở đó.
Cậu cũng nên đọc cả Java convention nhé! Nó sẽ giúp cậu mắc ít lỗi hơn.

3 Likes

A post was merged into an existing topic: Topic lưu trữ các post off-topic - version 3

Chắc chắn là vậy. Vì trong main bạn chỉ gọi đến các phương thức của lớp Hocdelamgi.quick mà không hề gọi đến các phương thức tĩnh của lớp hiện tại.

3 Likes

Muốn gọi cái nào là tùy ở bạn.
Nhưng:

  1. Bạn đang cho tụi mình xem đoạn mã chả liên quan gì đến lỗi bạn gặp phải.
  2. Bạn bạn định nghĩa các phương thức tĩnh đấy nhưng không hề dùng đến.

Vô nghĩa hết sức.
Kiểu như “Râu ông nọ cắm cằm bà kia” rồi lại hỏi: “Ủa, sao trông nó kì dữ vậy?”.

Có phải lớp hiện tại tên là quickSort nằm trong gói (package) tên là newpackage?
Thế là cái lớp quick trong gói Hocdelamgi ở đâu ra vậy?

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?