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

interchange sort qucick sort có source code

10 1,2K 1

Đ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 10
Dung lượng 173,12 KB

Nội dung

Heap sort, Merge sort,… nhưng chúng ta chỉ quan tâm tới cách viết và cài đặt thuật toán, cách thuật toán sắp xếp như thế nào chứ không quan tâm nhiều tới độ phức tạp, thời gian thực hiện

Trang 1

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN

Bài tập

Interchange sort – Quick sort

LỚP:

GVHD:

SVTH:

11520427 TRẦN HẠNH TRANG

11520367 NGUYỄN NHƯ THANH

11520242 MAI PHƯƠNG NGA

TP Hồ Chí Minh - tháng 12 năm 2013

MỞ ĐẦU

Trước đây, trong môn Cấu Trúc Dữ Liệu & Giải Thuật đã đề cập tới các thuật

Trang 2

Heap sort, Merge sort,…) nhưng chúng ta chỉ quan tâm tới cách viết và cài đặt thuật toán, cách thuật toán sắp xếp như thế nào chứ không quan tâm nhiều tới độ phức tạp, thời gian thực hiện của các thuật toán sắp xếp đó Việc hiểu được và tính toán độ phức tạp rất quan trọng trong quá trình học thuật toán Chúng ta chỉ có thể vận dụng hiệu quả từng thuật toán sắp xếp trong từng trường hợp, từng bài tập khi chúng ta biết về

độ phức tạp của nó Nhằm mục đích hiểu sâu hơn về độ phức tạp, thời gian thực hiện của các thuật toán sắp xếp nhóm em đã thực hiện việc so sánh giữa 2 thuật toán thuộc 2 nhóm khác nhau Cụ thể là so sánh giữa Interchange sort ( độ phức tạp O(n2))

và Quick sort ( độ phức tạp là O(logn) Mặc dù đã có sự chuẩn bị kỹ càng về chương trình Demo phần so sánh giữa 2 thuật toán và báo cáo nhưng vẫn còn một số sai sót trong quá trình làm bài tập Rất mong được sự góp ý của cô để bài tập được hoàn thiện

và chính xác hơn

Trang 3

Mục lục

Trang 4

1 Phân công công việc

• Nhóm có 5 thành viên:

◦ Ngô Thị Ngọc Sang: cài đặt giải thuật Interchange sort và Quick sort Code thử

chương trình tính số phép gán và phép so sánh của 2 giải thuật (kèm theo phần đọc dữ liệu từ file txt), viết báo cáo

◦ Nguyễn Như Thanh: đọc lại, cài đặt giải thuật Interchange sort và Quick sort Code

thử chương trình tính số phép gán và phép so sánh của 2 giải thuật ((kèm theo phần đọc dữ liệu từ file txt), viết báo cáo

◦ Mai Phương Nga: đọc lại, cài đặt giải thuật Interchange sort và Quick sort Code thử

chương trình tính số phép gán và phép so sánh của 2 giải thuật, bổ sung, hiệu chỉnh báo cáo

◦ Trần Hạnh Trang: đọc lại, cài đặt giải thuật Interchange sort và Quick sort Code thử

chương trình tính số phép gán và phép so sánh của 2 giải thuật, đọc và góp ý cho báo cáo hoàn thiện

◦ Võ Thị Thúy Kiều: đọc lại, cài đặt giải thuật Interchange sort và Quick sort, tính các

ví dụ đơn giản ( dữ liệu nhỏ) để so sánh kết quả với chương trình demo, đọc

và góp ý cho báo cáo hoàn thiện

2 Viết chương trình cài đặt 2 thuật toán ( có thao tác đếm số phép so sánh và phép gán)

2.1 Interchange sort

• Ý tưởng: Xuất phát từ đầu dãy, tìm tất các các nghịch thế chứa phần tử này, triệt

tiêu chúng bằng cách đổi chỗ 2 phần tử trong cặp nghịch thế Lặp lại xử lý trên với phần tử kế trong dãy

• Input: mảng a: a[0], a[1], …, a[n-1] chưa sắp xếp

• Output: mảng a đã sắp xếp tăng/ giảm( trong chương trình này sẽ sắp xếp tăng)

• Các bước thực hiện: ( Gán=0, so sánh=0)

for (i = 0 ; i<n-1 ; i++) // i chạy từ 0 tới n-2 {

Gán++;

So sánh++;

for (j = i+1; j < n ; j++)// j chạy từ 0 tới n-1

Trang 5

{ Gán++;

So sánh+=2;// so sánh của j và n, so sánh của a[i] và a[j]

if (a[i] > a[j]) // xét cặp a[i], a[j], so sánh a[i] và a[j]

Đổi chỗ a[i] và a[j];

Gán+=3;// đổi chỗ là 3 lần gán }

So sánh++;// so sánh lần cuối trước khi thoát khỏi vòng lặp j }

So sánh++;// so sánh lần cuối trước khi thoát khỏi vòng lặp i

• Đánh giá giải thuật: độ phức tạp O(n2)

2.2 Quick sort

• Ý tưởng:

◦ Giải thuật QuickSort sắp xếp dãy dựa trên việc phân hoạch dãy ban đầu thành 3 phần

:

Phần 1: Gồm các phần tử có giá trị bé hơn x Phần 2: Gồm các phần tử có giá trị bằng x Phần 3: Gồm các phần tử có giá trị lớn hơn x với x là giá trị của một phần tử tùy ý trong dãy ban đầu x được gọi là nút trục ( trong chương trình này chọn x là phần tử ở vị trí giữa của mảng

◦ Sau khi thực hiện phân hoạch, dãy ban đầu được phân thành 3 đoạn:

• 1 ak ≤ x , với k = 0 j

• 2 ak = x , với k = j+1 i-1

• 3 ak ≥ x , với k = i N

◦ Đoạn thứ 2 đã có thứ tự

◦ Nếu các đoạn 1 và 3 chỉ có 1 phần tử: đã có thứ tự  khi đó dãy con ban đầu đã sắp

◦ Nếu các đoạn 1 và 3 có nhiều hơn 1 phần tử thì để sắp xếp các đoạn 1 và 3, ta lần

lượt tiến hành việc phân hoạch từng dãy con theo cùng phương pháp phân hoạch dãy ban đầu vừa trình bày

• Mã giả:

Gán = 0;

So sánh = 0;

Chọn x = a[mid]=a[(left+right)/2];

i = left; j = right;

Trang 6

Trong khi (i < j)

{

Trong khi (a[i]<x) {

i++;

Gán++;

So sánh++; // tăng do so sánh a[i] và x }

So sánh++; // tăng lần cuối trước khi kết thúc vòng lặp Trong khi (a[j]>x)

{

j ;

Gán++;

So sánh++; // tăng do so sánh a[j] và x }

So sánh++; // tăng lần cuối trước khi kết thúc vòng lặp

So sánh++; // tăng do so sánh i và j Nếu ( i< j )

{ Đoicho(a[i],a[j]);

Gán+=3;

i++;

j ;

Gán+=2;

} }

So sánh++; // tăng lần cuối trước khi kết thúc vòng lặp

Nếu (j > left)

QuickSort(a, left, j);

So sánh++; // tăng do so sánh j và left

Nếu (i < right)

QuickSort(a, i, right);

So sánh++; //tăng do so sánh j và left

Trang 7

3 Bộ dữ liệu thử nghiệm

Xem thêm trong file test.txt đính kèm

4 Kết quả thử nghiệm

Trang 10

• Nhận xét:

◦ Đối với bộ dữ liệu ít phần tử (khoảng dưới 200 phần tử), tốc độ thực hiện của

Interchange Sort và Quick Sort không chênh lệch nhiều Tuy nhiên, khi số lượng phần tử càng lớn, Interchange trở nên chậm hơn rất nhiều do thời gian thực hiện cao với số phép gán và số phép so sánh rất lớn Trong khi đó, QuickSort càng cho thấy sự ưu việt hơn khi tốc độ thực hiện nhanh đáng kể

so với Interchange Sort Cụ thể ta có thể thấy, khi bộ test đạt tới 1000 phần

tử thì Quicksort chỉ cần khoảng 400.000 nhưng Interchange Sort lại cần rất lớn khoảng >25.000.000

-Kết luận:

+Việc so sánh như 2 thuật toán sắp xếp như trên rất trực quan, giúp chúng ta có thể thấy rõ được thuật toán chạy nhanh khi nào, tối ưu ở trường hợp nào Và trong trường hợp nào thì nên sử dụng thuật toán nào cho phù hợp Chẳng hạn, với Quick sort và Interchange sort thì khi bộ dữ liệu nhỏ (<200 phần tử) ta nên sử dụng Interchange sort, vì Interchange sort dễ cài đặt Tuy nhiên nếu bộ test có rất nhiều phần tử (>=200) thì ta nên sử dụng Quick sort, tuy khó cài đặt hơn Interchange sort nhưng lại tỏ ra rất tối ưu so với Interchange sort trong trường hợp số phần tử lớn

Ngày đăng: 22/12/2014, 08:26

TỪ KHÓA LIÊN QUAN

w