Theo mọi người thì trong hai thuật toán dưới đây thì cái nào tối ưu hơn (Xét về độ phức tạp và thời gian thực hiện của chương trình)? Em thì nghĩ cái số 1 tối ưu hơn
Thuật toán 1:
Thuật toán 2:
Theo em thì:
Với cùng với 1 mảng 1 chiều có 5 số đã được sắp xếp không giảm hoàn toàn (TH tốt nhất) thì:
- Thuật toán 1: thực hiện 8 phép gán và 5 phép so sánh.
- Thuật toán 2: thực hiện 12 phép gán và 5 phép so sánh.
Còn với cùng với 1 mảng 1 chiều có 5 số đã được sắp xếp không tăng hoàn toàn (TH xấu nhất) thì:
- Thuật toán 1: thực hiện 32 phép gán và 12 phép so sánh.
- Thuật toán 2: thực hiện 32 phép gán và 8 phép so sánh.
Nhân đây cho em hỏi luôn là nếu trong câu lệnh sau: If (a>0 && b>0) .... thì khi a=0 thì không thực hiện các câu lệnh trong if luôn phải không (nghĩa là chỉ thực hiện 1 phép so sánh hay sao?).
Còn nếu khi (b=0 và a>0) thì phải thực hiện so sánh a>0 trước rồi mới so sánh b>0 hay không (thực hiện 2 phép so sánh) phải không?
Tóm lại có phải là thứ tự đặt câu lệnh trong thuật toán điều kiện nói riêng và trong các thuật toán nói chung là rất quan trọng phải không?
Mong mọi người giải đáp dùm.
Thuật toán 1:
Code:
void SapXepChenTructiep(int *a, int n) { for (int i=1;i<n;i++) { int x=a[i]; int pos=i-1; if (a[pos]>x) { while ((a[pos]>x) && (pos>=0)) { a[pos+1]=a[pos]; pos=pos-1; } a[pos+1]=x; } } }
Thuật toán 2:
Code:
void SapXepChenTructiep(int *a, int n) { for (int i=1;i<n;i++) { int x=a[i]; int pos=i-1; while ((a[pos]>x) && (pos>=0)) { a[pos+1]=a[pos]; pos=pos-1; } a[pos+1]=x; } }
Với cùng với 1 mảng 1 chiều có 5 số đã được sắp xếp không giảm hoàn toàn (TH tốt nhất) thì:
- Thuật toán 1: thực hiện 8 phép gán và 5 phép so sánh.
- Thuật toán 2: thực hiện 12 phép gán và 5 phép so sánh.
Còn với cùng với 1 mảng 1 chiều có 5 số đã được sắp xếp không tăng hoàn toàn (TH xấu nhất) thì:
- Thuật toán 1: thực hiện 32 phép gán và 12 phép so sánh.
- Thuật toán 2: thực hiện 32 phép gán và 8 phép so sánh.
Nhân đây cho em hỏi luôn là nếu trong câu lệnh sau: If (a>0 && b>0) .... thì khi a=0 thì không thực hiện các câu lệnh trong if luôn phải không (nghĩa là chỉ thực hiện 1 phép so sánh hay sao?).
Còn nếu khi (b=0 và a>0) thì phải thực hiện so sánh a>0 trước rồi mới so sánh b>0 hay không (thực hiện 2 phép so sánh) phải không?
Tóm lại có phải là thứ tự đặt câu lệnh trong thuật toán điều kiện nói riêng và trong các thuật toán nói chung là rất quan trọng phải không?
Mong mọi người giải đáp dùm.
Comment