Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (45.56 KB, 2 trang )
THUẬT TOÁN QUY CHIA ĐỂ TRỊ
1. Mergesort : (đệ quy , ko đệ quy…)
1.1 Đệ quy :
//tách mảng a thành 2 phần gần bằng nhau
//kết quả chứa trong 2 mảng b và c
void tach(int a[], int na,
int b[], int &nb,
int c[], int &nc)
{
for(int i=0; i<na/2; i++) //bỏ nửa đầu của a vào b
b[i] = a[i];
for(int i=na/2; i<na; i++)//bỏ phần còn lại của a vào c
c[i-na/2] = a[i];
nb = na/2; //tính toán số phần tử của b và c
nc = na - nb;
}
//trộn 2 mảng a, b đã có thứ tự (tăng)
//tạo thành mảng c cũng có thứ tự (tăng)
void tron(int a[], int na,
int b[], int nb,
int c[], int &nc)
{
int i=0, j=0, k=0; //i chạy trên a, j chạy trên b, k chạy trên c
while (i<na && j<nb){ //cả a và b còn phần tử
if (a[i]<b[j]) c[k++] = a[i++];
else c[k++] = b[j++];
}
//đổ phần còn lại của a vào c (nếu còn)
while (i<na) c[k++] = a[i++];
//đổ phần còn lại của b vào c (nếu còn)
while (j<nb) c[k++] = b[j++];