Hỏi về Implement hàm QuickSort trong Java

Câu hỏi của em đã comment trong đoạn code ở dưới ạ, mong mọi người giúp đỡ. Em cảm ơn nhiều ạ !!

import java.util.Scanner;

public class QuickSort 
{
	public static void qSort(int[] arr, int l, int r)
	{
		int pivot = arr[(l + r) / 2];
		int i = l;
		int j = r;
	
		while (i < j)
		{
			while (arr[i] < pivot)
			{
				i++;
			}
		
			while (arr[j] > pivot)
			{
				j--;
			}
		
                  /*Cho em hỏi về đoạn code ở dưới ạ
                  Khi thay hàm if ở dưới thành 2 hàm if gồm i < j và i == j thì khi chạy chương 
                  trình lại không đúng */
                 
                  /* if (i < j)
			         {
				       int tempValue = arr[i];
				       arr[i] = arr[j];
				       arr[j] = tempValue;
				       i++;
				       j--;
			         }

                    if (i == j)
                    {
                         i++;
                         j--;
                    }    */
                    
                      //EM FORMAT HƠI LỖI MONG MỌI NGƯỜI THÔNG CẢM :DD
                  
			if (i <= j)
			{
				int tempValue = arr[i];
				arr[i] = arr[j];
				arr[j] = tempValue;
				i++;
				j--;
			}
		
		}
	
		if (i < r)
		{
			qSort(arr, i, r);
		}
	
		if (j > l)
		{
			qSort(arr, l, j);
		}
	}


	public static void printArray(int[] arr)
	{
		for (int i : arr)
		{
			System.out.print(i + " ");
		}
	}


	public static void main(String[] args)
	{
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[] arr = new int[n];
	
		for (int i = 0; i < n; i++)
		{
			arr[i] = sc.nextInt();
		}
	
		sc.close();
		qSort(arr, 0, n - 1);
		printArray(arr);
	}
}

Phân tích đơn giản 1 case thế này thôi: i = 1, j = 3.
Nếu tách riêng 2 phần if thì thằng if i<j chạy trước nên nó thực hiện abcxyz gì đó và nó
i++ => i = 2
j-- => j = 2
Lúc này if thứ 2 lại đúng thì lại chạy vào thực hiện zyxcba gì đó => logic sai.

5 Likes

À em cảm ơn bác, em hiểu vấn đề rồi ạ, em vừa thử lại else if thì ok rồi ạ

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