Em có thắc mắc về cách mảng được chia nhỏ để giải thuật:
void MergeSort(int a[], int left, int right)
{
if (right > left){
int mid; // Phan tu o giua
mid = (left + right) / 2;
MergeSort(a, left, mid); // Goi de quy mang con ben trai
MergeSort(a, mid + 1, right); // Goi de quy mang con ben phai
Merge(a, left, mid, right); // Goi ham so sanh hai mang con
}
}
Các anh chị cho em hỏi: sau mỗi lần gọi đệ quy thì mảng con sẽ được chia như thế chi tiết như thế nào?
VD: mảng A = {3,5,1,4,7,2,44,66,33,11} ( 10 phan tur → mid = 4)
gọi MergeSort(a, left, mid) được {3,5,1,4,7} → {3,5,1} → {3,5} → 3
gọi MergeSort(a, mid + 1, right) sẽ bắt đầu chạy từ mảng nào ? phần mảng con bên phải là {2,44,66,33,11}, {4,7} của {3,5,1,4,7} là sẽ chạy kiểu gì khi mid, right đã thay đổi?[details=Summary]This text will be hidden[/details]