Chào các bạn! Vì nhiều lý do từ nay Truyen2U chính thức đổi tên là Truyen247.Pro. Mong các bạn tiếp tục ủng hộ truy cập tên miền mới này nhé! Mãi yêu... ♥

giải thuật sắp xếp nhanh quicksort

9) Trình bày giải thuật sắp xếp nhanh (QuickSort)? Trình bày thời gian thực hiện giải thuật với dãy n phần tử. Minh họa diễn biến ở từng bước khi áp dụng giải thuật này với dãy số: 24, 42, 74, 11, 65, 58, 83, 36, 88, 99

Bài làm:

Procedure Quick_Sort(a, vt_dau, vt_cuoi);

Kt:= True;

If vt_cuoi > vt_dau then

Begin

i:= vt_dau + 1;

j:= vt_cuoi - 1;

x:= a[vt_dau];

While kt do

While a[i] < x and I =< vt_cuoi do i:= i+1;

While a[i] > x and j > vt_dau do j:= j+1;

If j>i then

Begin

y := a[j];

a[j] := a[i];

a[i] := y;

End;

Else

Begin

Kt := False;

y := a[vt_dau];

a[vt_dau] := a[j];

a[j] := y;

Quick_Sort(a, vt_dau, j – 1);

Quick_Sort(a, j + 1, vt_cuoi);

End;

End;

Return;

Thời gian thực hiện giải thuật:

Gọi T(n) là thời gian thực hiện giải thuật với dãy n phần tử

P(n) là thời gian để phân chia dãy n phần tử thành 2 đoạn

=> T(n) = P(n) + T(j – vt_dau) + T(vt_cuoi – j)

             = C.n + …

Giả sử: Sau mỗi bước dãy được chia làm 2 phần bằng nhau

=> T(n) = C.n + 2.T(n/2)

             = C.n + 2 C.n/2 + 4.T(n/4)

             = …

             = C.n + 2 C.n/2 + 4 C.n/4 + 2log2n C(n/2log2n) T(1)

             = C.n + C.n + … + C.n

T(1) = 1 khi thực hiện đến bước thứ log2n

Có log2n phần tử C.n

T(n) = C.n log2n = O(nlog2n)

Bạn đang đọc truyện trên: Truyen247.Pro

Tags: