Ở cuối bài là thuật toán quickSort, mình chạy bằng tay trên giấy thì sẽ tới lúc mà phần bên trái mảng được sắp xong thì: " j = left && i = right"
vậy đoạn này là không thể thực hiện:
QuickSort(a, n, left, j);
if (i < right)
QuickSort(a, n, i, right); ```
vậy theo cách chạy tay thì quá trình Sorting sẽ ngừng ở đây khi mảng chưa được sếp xong. Nhưng máy vẫn sắp xếp bình thường. Vậy mọi người cho mình hỏi ở đây mình bỏ sót cái gì? Tks
void QuickSort(int *&a, int n, int left=0, int right =0)
{
int x, i = left, j = right;
x = a[(left + right) / 2];
do
{
while (a[i] < x) i++;
while (a[j] > x) j–;
if (i <= j)
{
swap(a[i], a[j]);
i++; j–;
}
} while (i <= j);
if (left < j)
QuickSort(a, n, left, j);
if (i < right)
QuickSort(a, n, i, right);
}
20 kí tự

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