1. Trang chủ
  2. » Công Nghệ Thông Tin

Kĩ thuật chia để trị trong kĩ thuật lập trình

2 419 4

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 2
Dung lượng 14,4 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Chi tiết về phương pháp chia để trị trong kĩ thuật lập trình ví dụ chi tiết về phương pháp chia để trị ví dụ minh họa chi tiết rõ ràng code mẫu một số bài ví dụ thường gặp nhất khi học kĩ thuật lập trình

Trang 1

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++];

nc = na+nb;

}

void mergesort(int a[], int n)

{

int b[100],c[100],nb,nc;

if (n>1) {

tach(a,n,b,nb,c,nc); //tách a thành b và c mergesort(b,nb); //sắp b tăng dần (đệ quy) mergesort(c,nc); //sắp c tăng dần (đệ quy) tron(b,nb,c,nc,a,n); //trộn b,c ngược trở vào a }

}

1.2 Không đệ quy :

2 Quicksort :

2.1 Đệ quy:

//Quicksort

void QuickSort(int a[],int n)

{

QuickSortC(a,0,n-1);

}

Trang 2

void QuickSortC(int a[],int Left,int Right) {

int i,j,mid;

i=Left;

j=Right;

mid=a[(int)(Left+Right)/2];

do

{

while(a[i]<mid && i<Right)i++; while(a[j]>mid && j>Left)j ;

if(i<=j)

{

Swap(a[i],a[j]);

i++;

j ;

}

} while (i<=j);

if (Left<j)

QuickSortC(a,Left,j);

if(i<Right)

QuickSortC(a,i,Right);

}

void Swap(int &a,int &b){int tg=a;a=b;b=tg;}

Ngày đăng: 09/09/2015, 16:52

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w