Tải bản đầy đủ - 0 (trang)
Mô tả chi tiết thuật toán

Mô tả chi tiết thuật toán

Tải bản đầy đủ - 0trang

- Chúng ta sẽ chia mảng lớn thành những mảng con

nhỏ hơn bằng cách chia đôi mảng lớn và chúng ta

tiếp tục chia đôi các mảng con cho tới khi mảng

con nhỏ nhất chỉ còn 1 phần tử. Sau đó chúng ta

sẽ tiếng hành so sánh 2 mảng con có cùng mảng

cơ sở (khi chúng ta chia đôi mảng lớn thành 2

mảng con thì mảng lớn đó chúng ta gọi là mảng cơ

sở của 2 mảng con đó) khi so sánh chúng sẽ vừa

sắp xếp vừa ghép 2 mảng con đó lại thành mảng

cơ sở, chúng ta tiếp tục so sánh và ghép các mảng

con lại đến khi còn lại mảng duy nhất thì đó là

mảng đã được sắp xếp

- Cách thức thực hiện ý tưởng :

 Duyệt trên dãy a tại vị trí i ( i là vị trí bắt đầu

của dãy a )

 Duyệt trên dãy b tại ví trí j ( j là vị trí bắt đầu

của dãy b )

 Nếu a[i]>b[j] thì thêmb[j] vào trong dãy c tăng

biến j ngược lại thêm a[i] vào dãy và tang biến i

 Nếu một trong 2 dãy hết trước thỳ tiến hành đưa

tồn bộ dãy còn lại vào trong dãy c

 Áp dụng trong trường hợp a, b là 2 đoạn của

mảng

- a ( left, mid ), b ( mid +1, right )

- array( left , right )

 Để thuận tiện xử lý thỳ ta sẽ trả lại toàn bộ giá

trị vào mảng ban đầu .

Giải mã:

o Input: a ( left , mid ) , a ( mid , right )

o Output: array(left , right ) được sắp xếp không

giảm.

4



1. i =left

2. j = mid +1

3. k = left

4. while( i < mid && j < right )

if ( a[i] < a[j] )

array[k] = a[i]

i++

else

array[k] = a[j]

j++

k++

5. while ( i<= mid )

array[k] =a[i]

i++

k++

6. while ( j <=right )

array[ k ]= a[j]

j++

k++

7. for( int i=1;i<=right;i++)

array[i] = a[i]



b. Thuật toán sắp xếp trộn ( MergeSort)

 Thuật toán sắp xếp trộn mergesort

 Input: a[left…right]

5



 Output: a[left…right] đã được sắp xếp

1. if( left>= right) return;

2. mid= ( left+right) / 2

3. mergesort( left , mid);

4. mergesort( mid+1, right );

5. merge ( a[left…mid ], a[ mid +1, right ];

3. Thực hiện với 5 bộ dữ liệu với n>=10.

a. Với mảng a= { 4, 15, 3, 17, 9, 12, 1, 4, 20, 11}, n=10

4, 15, 3, 17, 9, 12, 1, 4,

20, 11

4, 15, 3, 17, 9

4 , 15 , 3



17,

9



4,

15



3



17



4



15



4,

15

3, 4, 15



12, 1, 4 , 20 , 11

12, 1 ,4



20,

11



9



12,

1



4



3



9,

17



12



1



4



11,

20



3



9,17



1,

12



4



11,

20



1, 4, 12



11,

20



9,

17



3, 4, 9, 15, 17



20



11



1, 2, 11, 12, 20



1, 2, 3, 4, 9, 11, 12, 15,

17, 20

b. Với mảng a={ 2, 30, 11, 10, 3, 1, 22, 12, 19, 4, 1, 9 },

n=12

2, 30, 11, 10, 3, 1, 22, 12, 19,

6



4, 1, 9

2, 30, 11, 10, 3, 1



22, 12, 19, 4, 1, 9



2, 30, 11



10, 3, 1



22, 12,

19



4, 1, 9



2,3

0



11



10,

3



1



22,1

2



19



4,1



9



2



30



10



3



12



19



1



9



2,3

0



11



3,10



1



12,2

2



19



1,4



9



11



2,11,30



1



22



1,3,10



4



12,19,22



1,2,3,10,11,30



1,4,9



1,4,9,12,19,22



1,1,3,4,,9,10,11,12,19,22,30

c. Với mảng a= { 67, 34, 12, 2, 4, 11, 23, 1, 9, 3 }

67, 34, 12, 2, 4, 11, 23,

1, 9, 3

67, 34, 12, 2, 4

67, 34, 12

67,3

4



12



67



34



34,6

7

12,34,67



11, 23, 1, 9, 3



2,4

2



11, 23, 1



9,3



4



11,2

3



1



12



2,4



11



23



1



3,9



12



2,4



11,2

3



1



3,9



1,11,23



3,9



2,4



2, 4, 12, 34, 67



9



3



1, 3, 9, 11, 23

7



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Mô tả chi tiết thuật toán

Tải bản đầy đủ ngay(0 tr)

×