Tải bản đầy đủ (.doc) (85 trang)

cac thuat toan sap xep trong

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (5.3 MB, 85 trang )

Gvhd: TS. Phan Lê Na

Ngành khoa học máy tính

Lời nói đầu
Ngày nay, công nghệ thông tin đà và đang trở thành
một trong những ngành mũi nhọn. Nó không chỉ bó hẹp
trong phạm vi nhà trờng, viện nghiên cứu, các trung tâm máy
tính mà còn đợc ứng dụng rộng rÃi trong tất cả các lĩnh vực
đời sống và xà hội. Có thể nói sự phát triển vợt bậc của Công
nghệ thông tin đà giúp con ngời hoá giải đợc rất nhiều bài
toán phức tạp mà trớc đây đà tốn rất nhiều thời gian, công
sức, tiền bạc. Giờ đây nó đà trở nên đơn giản hơn, nhanh
chóng hơn và đạt độ chính xác cao hơn. Điều này đà đánh
dấu một bớc ngoặc trong sự phát triển của tin học nói riêng
cũng nh của khoa học nhân loại nói chung.
Cùng với sự phát triển vợt bậc đó sinh viên CNTT ngày nay
không ngừng học hỏi, cập nhật những công cụ mới và biết
ứng dụng những kiến thức đà đợc học vào thực tiễn của
cuộc sống. Đợt thực tập cơ sở này chính là bớc đầu tiên đi
sâu vào tìm hiểu lĩnh vực công nghệ thông tin ứng dụng
trong thực tiễn. Trên cơ sở những kiến thức đà đợc học
trong những năm vừa qua, để chúng em hoàn thành đợt
thực tập này.
Đề tài gồm 4 phần:
Phần 1: Các thuật toán sắp xếp trong
Phần 2: Chia sẻ tài nguyên trên mạng cục bộ
Phần 3: Từ điển
Phần 4: Sử dụng trình duyệt Web
Ngoài sự cố gắng nỗ lực của các thành viên trong nhóm
là sự tận tình giúp đỡ và giảng dạy của các thầy, cô giáo


trong khoa CNTT Trờng Đại học Vinh. Chúng em xin chân
Hồ Thi Giang, Vũ Thị Diệp, Phan Thị Dung, Ngô Thị Thuỳ D- 1
ơng


Gvhd: TS. Phan Lê Na

Ngành khoa học máy tính

thành cảm ơn Tiến Sỹ Phan Lê Na đà hớng dẫn tận tình
và giúp đỡ chúng em trong quá trình làm đề tài này. Xin
kính chúc Tiến Sỹ Phan Lê Na sức khoẻ, thành công và
tiếp tục đạt nhiều thắng lợi trong nghiên cứu khoa học và sự
nghiệp trồng ngời.
Do thời gian và trình độ có hạn nên chắc chắn không
tránh khỏi những thiếu sót. Kính mong nhận đợc sự đóng
góp ý kiến của các thầy cô và các bạn.

Đề bài
Trờng Đại Học Vinh
Khoa Công Nghệ Thông Tin
-----o0o----Đề tài thực tập cơ sở
Năm học : 2008 -2009
MÃ đề : 030

Câu 1:Các thuật toán sắp xếp trong(sắp xếp chèn,
sắp xếp phân đoạn, sắp xếp vun đống,)
Yêu cầu :
1. Trình bày thuật toán
2. Ví dụ minh hoạ

3. Cài đặt thuật toán trên một ngôn ngữ nào đó(Pascal, C,
C++)
Câu 2: Chia sẻ tài nguyên trên mạng cục bộ
1 Thiết lập việc chia sẻ tài nguyên.
2 Cài đặt các thiết bị dùng chung qua mạng.
3 Chia sẻ dữ liệu qua mạng(ổ đĩa, th mục, tệp,)
Hồ Thi Giang, Vũ Thị Diệp, Phan Thị Dung, Ngô Thị Thuỳ D- 2
¬ng


Gvhd: TS. Phan Lê Na

Ngành khoa học máy tính

Câu 3: Từ điển
Cho tệp văn bản trong đó chứa các từ, các dấu phân
cách từ, dấu cách,dấu phẩy, dấu chấm, dấu chÊm phÈy, dÊu
chÊm than, dÊu chÊm hái. Mäi tõ b¾t đầu bằng chữ cái
A..Z(không phân biệt chữ hoa và chữ thờng).
1. Viết thủ tục đọc các từ trong tệp văn bản và lu trữ
vào mảng các danh sách liên kết:
Type Danhsach=^PhanTu;
PhanTu=Record
Tu:String[15];
Tiep:DanhSach;
end;
Var
TuDien :array[A..A]of DanhSach;
Mỗi danh sách liên kết trong từ điển xếp theo thứ tự tăng
và các từ khoá là khác nhau.

2. Viết thủ tục hiển thị các từ ra màn hình theo thứ tự
tăng.
3. Viết thủ tục bổ sung từ mới bằng cách đọc từ bàn phím
và tìm nó trong từ điển.
- Nếu thấy thì hiển thị thông báo ĐÃ có.
- Nếu không chèn vào vị trí thích hợp
4. Viết Menu để thực hiện các chức năng trên.
Yêu cầu báo cáo:
1. Ngôn ngữ cài đặt: PASCAL, C hoặc C++.
2. Báo cáo
- Đề bài toán
- Mô tả thuật toán.
Hồ Thi Giang, Vũ Thị Diệp, Phan Thị Dung, Ngô Thị Thuỳ D- 3
¬ng


Gvhd: TS. Phan Lê Na

Ngành khoa học máy tính

- Mô tả các Modul thiết kế bài toán
3. Chơng trình
Câu 4: Sử dụng th điện tử(Email):
1. Các thành phần cấu trúc của một địa chỉ th diện tử.
2. Sử dụng dịch vơ th ®iƯn tư Yahoo Mail.
3. Nghi thøc viÕt th và vấn đề an toàn khi sử dụng th diện
tử.

Phần I: các thuật toán sắp xếp trong
A: đặt vấn đề

Sắp xếp(Sorting) là quá trình bố trí lại các phần tử
của một đối tợng nào đó theo thứ tự ấn định. ví dụ : sắp
xếp tăng (giảm) dần của một dÃy số, thứ tự từ điển với một
dÃy chữ...
Yêu cầu về sắp xếp thờng xuyên xuất hiện trong các
ứng dụng tin học, với những mục đích khác nhau: Sắp xếp
dữ liệu lu trữ trong máy tính để tìm kiếm cho thuận lợi,
sắp xếp các kết quả để in ra trên bảng biĨu…
Nãi chung, d÷ liƯu cã thĨ xt hiƯn díi nhiỊu dạng khác
nhau nhng ở đây ta quy ớc: Tập đối tợng đợc sắp xếp là tập
các bản ghi (Records), mỗi bản ghi gồm một số trờng (Fields)
dữ liệu, tơng ứng với các thuộc tính khác nhau.
Sắp xếp trong (internal sorting) là các phơng pháp
sắp xếp tác động trên tập đối tợng đợc lu trữ ở bộ nhớ
trong(gọi là Bảng(Table)).
Hồ Thi Giang, Vũ Thị Diệp, Phan Thị Dung, Ngô Thị Thuỳ D- 4
¬ng


Gvhd: TS. Phan Lê Na

Ngành khoa học máy tính

Bài toán sắp xếp đợc đặt ra ở đây là sắp xếp một
bảng gồm n bản ghi R1, R2,,Rn . Tuy nhiên ta thấy không
phải tất cả các dữ liệu, các bản ghi đều đợc xem xét đến
trong quá trình sắp xếp mà chỉ một hay một vài trờng hợp
đợc chú ý tới trờng hợp nh vậy đợc gọi là khoá sắp xếp.
Khoá đóng một vai trò đặc biệt trong quá trình sắp
xếp cho nên sau này khi trình bày các phơng pháp, ví dụ và

giải thuật để đơn giản ta chỉ nói tới các giá trị khoá mà
thôi.
Nh vậy, bài toán đặt ra là sắp xếp một bảng gồm n
khoá: K1,K2,Kn đại diện cho các bản ghi và giả sử: K iKj , với
i,j. Để minh hoạ cho các phơng pháp sắp xếp ta giả sử thứ
tự sắp xếp là tăng dần và sử dụng khoá sau làm ví dụ: 40
20 70 15 60 52 90 30 100 80.

B: C¸c kiĨu s¾p xÕp trong
I. S¾p xÕp kiĨu lùa chän(selection sort)

1. Giíi thiệu phơng pháp

ở lợt thứ i (i=1,2,,n-1) ta sẽ chọn trong dÃy khoá K i, Ki+1,
,Kn khoá nhỏ nhất và đổi chỗ với K i.Nh vậy, sau j lợt, j khoá
nhỏ hơn đà lần lợt ở các vị trí thứ nhất, thứ thứ 2, thứ j
theo đúng vị trí sắp xÕp.
2. VÝ dơ

Hå Thi Giang, Vị ThÞ DiƯp, Phan ThÞ Dung, Ngô Thị Thuỳ D- 5
ơng


Gvhd: TS. Phan Lê Na

Ngành khoa học máy tính

1. Thuật toán
Procedure select-sort(k,n)
{Xét các lợt , tìm khoá nhỏ nhất và đổi chỗ}

1. For i:=1 to n-1 do
2. Begin
M:=i;
I
1
2

Ki
40
20

3

70

4
5
6
7
8
9
10

Lợt

1
15
20

2

15
20

3
15
20

4
15
20

9
15
20

70

70

30

30

30

40
60
52
90
70

100
80

40
52
60
70
80
90
100

15
40
40
40
60
60
60
60
52
52
52
52
90
90
90
90
30
30
30

70
100
100 100
100
80
80
80
80
3. For j:=i+1 to n do
if K[j]4. if m<>i then {Đổi chỗ}
Begin
X:=K[i];
K[i]:=K[m];
K[m]:=X;
End;
End;
Return;
1. Cài đặt thuật toán

PROGRAM luachon;
uses crt;
type mang=array[1..30]of integer;
var k:mang;
f:text;
n:integer;
{-------------------------------------}
Hå Thi Giang, Vị ThÞ DiƯp, Phan ThÞ Dung, Ngô Thị Thuỳ D- 6
ơng



Gvhd: TS. Phan Lê Na

Ngành khoa học máy tính

procedure inmang(k:mang; n:integer);
var i:integer;
begin
for i:=1 to n do
write(k[i]:4);
end;
{--------------------------------------}
procedure sapxep(var k:mang; n:integer);
var j,i,tg,m:integer;
begin
for i:=1 to n-1 do
begin
m:=i;
for j:=i+1 to n do
if k[j]if m<>i then
begin
tg:=k[i];
k[i]:=k[m];
k[m]:=tg;
end;
end;
end;
{---------------------------------------}
begin

clrscr;
assign(f,'dayso.pas');
reset(f);
while not eof(f) do
begin
n:=n+1;
read(f,k[n]);
end;
close(f);
writeln('========DOC DU LIEU TU =========');
writeln(' ----------*SAP XEP LUA CHON*-----------');
writeln('Mang chua sap xep');
inmang(k,n);
writeln;
writeln('Mang sau khi sap xep');
sapxep(k,n);
inmang(k,n);
readln;
Hồ Thi Giang, Vũ Thị Diệp, Phan Thị Dung, Ngô Thị Thuỳ D- 7
ơng


Gvhd: TS. Phan Lê Na

Ngành khoa học máy tính

end.
Kết quả:

II. Sắp xếp thêm dần( insertion Sort)


1.Giới thiệu phơng pháp
- đầu tiên khoá k1 đợc coi nh một bảng gồm bộ khoá đÃ
đợc sắp xếp.
- Xét khoá K2, so sánh với khoá K1 để xác định chỗ chèn
ta thu đợc bảng gồm 2 khoá đà đợc sắp xếp.
- Xét thêm khoá K3, so sánh với K1, K2 để xác định chỗ
chèn ta thu đợc bảng gồm 3 khoá đà đợc sắp xếp. Quá trình
đợc sắp xếp tơng tự với các khoá còn lại cho đến khi dÃy
khoá đợc sắp xếp xong
2.Ví dô
Cho d·y: A:=40 20 70 15 60 52 90 30 100 80
Chia dÃy A làm 2 phần.
B={40},C={20 70 15 60 52 90 30 100 80}
Lần 1:
Lấy phần tử đầu tiên cđa C lµ 20 ra  C={70 15 60 52
90 30 100 80}.
Tìm vị trí của số 20 trong mảng BB{20,40}
Lần 2:

Hồ Thi Giang, Vũ Thị Diệp, Phan Thị Dung, Ngô Thị Thuỳ D- 8
ơng


Gvhd: TS. Phan Lê Na

Ngành khoa học máy tính

Lấy phần tử đầu tiên của C là 70 ra C={15 60 52 90
30 100 80}.

Tìm vị trí của số 70 trong mảng BB={20,40,70}
Lần 3:
Lấy phần tử đầu tiên của C là 15 ra C={ 60 52 90 30
100 80}.
Tìm vị trí của số 15 trong mảng BB{15,20,40,70}
Lần 4:
Lấy phần tử đầu tiên của C là 60 ra C={52 90 30 100
80}.
Tìm

vị

trí

của

số

60

trong

mảng

BB={15,20,40,60,70}
Lần 5:
Lấy phần tử đầu tiên của C là 52 ra C={90 30 100
80}.
Tìm


vị

trí

của

số

52

trong

mảng

BB{15,20,40,52,60,70}
Lần 6:
Lấy phần tử đầu tiên của C là 90 ra C={30 100 80}.
Tìm

vị

trí

của

số

90

trong


mảng

BB={15,20,40,52,60,70,90}
Lần 7:
Lấy phần tử đầu tiên của C là 30 ra C={100 80}.
Tìm

vị

trí

của

số

30

trong

mảng

BB{15,20,30,40,52,60,70,90}
Lần 8:
Lấy phần tử đầu tiên của C là 100 ra C={ 80}.

Hå Thi Giang, Vị ThÞ DiƯp, Phan ThÞ Dung, Ngô Thị Thuỳ D- 9
ơng



Gvhd: TS. Phan Lê Na

Tìm

Ngành khoa học máy tính

vị

trí

của

số

100

trong

mảng

BB={15,20,30,40,52,60,70,90,100}
Lần 9:
Lấy phần tử đầu tiên của C là 80 ra C={ }.
Tìm

vị

trí

của


số

80

trong

mảng

B={15,20,30,40,52,60,70,80,90,100}
Kết thúc thuật toán
3.Thuật toán
Procedure Insertion Sort(k,n);
{ - X: làm ô nhớ phụ để chứa khoá mới đang đợc xét. Để
đảm bảo cho mọi khoá mới trong mọi trờng hợp, ngay cả khi
vị trí thực của nó là vị trí đầu tiên, đều đợc chèn vào khoá
nhỏ hơn nó và khoá lớn hơn nó.
-Giả sử K0: khoá có giá trị nhỏ hơn mọi khoá của bảng
và đứng trớc mọi khoá ®ã. Qui íc K0=- }.
1. K0=-
2. For i:=2 to n do
Begin
3.

X:=K[i]; J:=i-1;

4.{Xác định chỗ cho khoá mới đợc xét và dịch chuyển
các khoá cần thiết}
While (K[j]>X) do
Begin

K[j+1]:=K[j];
J:=j-1;
End;
5.{Đa X vào đúng chỗ}
K[j+1]:=X;
Hồ Thi Giang, Vũ Thị Diệp, Phan Thị Dung, Ngô Thị Thuỳ D- 10
ơng


Gvhd: TS. Phan Lê Na

Ngành khoa học máy tính

End;
6. Return;
4.Cài đặt thuật toán
PROGRAM themdan;
uses crt;
type mang=array[0..30]of integer;
var k:mang;
f:text;
n:integer;
{-------------------------------------}
procedure inmang(k:mang; n:integer);
var i:integer;
begin
for i:=1 to n do
write(k[i]:4);
end;
{--------------------------------------}

procedure sapxep(var k:mang; n:integer);
var j,i,x:integer;
begin
K[0]:=0;
for i:=2 to n do
begin
x:=K[i];
j:=i-1;
while xbegin
k[j+1]:=k[j];
j:=j-1;
end;
k[j+1]:=x;
end;
end;
{---------------------------------------}
begin
clrscr;
assign(f,'dayso.pas');
reset(f);
while not eof(f) do
begin
Hå Thi Giang, Vũ Thị Diệp, Phan Thị Dung, Ngô Thị Thuỳ D- 11
¬ng


Gvhd: TS. Phan Lê Na

Ngành khoa học máy tính


n:=n+1;
read(f,k[n]);
end;
close(f);
writeln('=============DOC
DU
LIEU
TEP============');
writeln(' ----------*SAP XEP THEM DAN*-----------');
writeln('Mang chua sap xep');
inmang(k,n);
writeln;
writeln('Mang sau khi sap xep');
sapxep(k,n);
inmang(k,n);
readln;
end.
KÕt quả:

TU

III. sắp xếp đổi chỗ ( Exchange Sort)
1. Giới thiệu phơng pháp
Bằng các khoá đợc duyệt kể từ đáy lên đỉnh( từ sau ra
trớc). Dọc đờng nếu gặp hai khoá kế cận ngợc thứ tự thì
đổi chỗ chúng cho nhau. Nh vậy, ở lợt đầu tiên khoá nhỏ
nhất sẽ đợc chuyển dần lên đỉnh. Quá trình tiếp tục duyệt
từ cuối ®Õn phÇn tư thø 2, råi ci ®Õn phÇn tư thứ 3, Phơng pháp này còn đợc gọi là phơng pháp sắp xếp nổi
bọt(Bubble Sort) vì quá trình so sánh giữa các cặp phần tử

giống nh Bọt nổi trên mặt nớc.
2. Ví dụ
I
1

Ki
40

Lợt

1
15

2
15

3
15

4
15



9
15

Hồ Thi Giang, Vũ Thị Diệp, Phan Thị Dung, Ngô Thị Thuỳ D- 12
ơng



Gvhd: TS. Phan Lê Na

2
3
4
5
6
7
8
9
1
0

20
70
15
60
52
90
30
100
80

Ngành khoa học máy tính

40
20
70
30

60
52
90
80
10
0

20
40
30
70
52
60
80
90
10
0

20
30
40
52
70
60
80
90
10
0

20

30
40
52
60
70
80
90
10
0

20
30
40
52
60
70
80
90
100

3. Thuật to¸n
Procedure BUBBLE- SORT(K,n);
1.
For i:=1 to n-1 do
2.
For j:=n downto i+1
3.
if K[j]Begin
4.

x:=K[j];
K[j]:=K[j-1];
K[j-1]:=x;
End;
5. Return;
4) Cài đặt thuật toán
PROGRAM doicho;
uses crt;
type mang=array[0..30]of integer;
var k:mang;
f:text;
n:integer;
{-------------------------------------}
procedure inmang(k:mang; n:integer);
var i:integer;
begin
for i:=1 to n do
Hå Thi Giang, Vũ Thị Diệp, Phan Thị Dung, Ngô Thị Thuỳ D- 13
¬ng


Gvhd: TS. Phan Lê Na

Ngành khoa học máy tính

write(k[i]:4);
end;
{--------------------------------------}
procedure sapxep(var k:mang; n: integer);
var i,j:integer;

x:integer;
begin
for i:=1 to n-1 do
for j:=n downto i+1 do
if K[j]begin
x:=K[j];
K[j]:=K[j-1];
K[j-1]:=x;
end;
end;
{---------------------------------------}
begin
clrscr;
assign(f,'dayso.pas');
reset(f);
while not eof(f) do
begin
n:=n+1;
read(f,k[n]);
end;
close(f);
writeln('==========DOC

DU

LIEU

TU


TEP============');
Hå Thi Giang, Vò Thị Diệp, Phan Thị Dung, Ngô Thị Thuỳ D- 14
ơng


Gvhd: TS. Phan Lê Na

Ngành khoa học máy tính

writeln(' ----------*SAP XEP DOI CHO*-----------');
writeln('Mang chua sap xep');
inmang(k,n);
writeln;
writeln('Mang sau khi sap xep');
sapxep(k,n);
inmang(k,n);
readln;
end.
KÕt quả:

iv.Sắp xếp phân đoạn
1.Giới thiệu phơng pháp
Sắp xếp kiểu phân đoạn là cải biên của phơng pháp
sắp xếp đổi chỗ, nó dựa trên nguyên tắc: u tiên đổi chỗ
trên các khoảng cách lớn để đạt đợc hiệu quả nhất.
ý chủ đạo của phơng pháp là chọn một khoá ngẫu nhiên
trong dÃy khoá làm Khoá chốt mọi khoá có giá trị nhỏ hơn
khoá chốt phải đợc xếp vào vị trí trớc khoá chốt. Mọi khoá có
giá trị lớn hơn khoá chốt phải đợc
xếp vào sau vị trí khoá chốt. Muốn vậy, các khoá trong dÃy

phải đợc so sánh với khoá chốt và đổi chỗ cho nhau. Khi việc
Hồ Thi Giang, Vũ Thị Diệp, Phan Thị Dung, Ngô Thị Thuỳ D- 15
¬ng


Gvhd: TS. Phan Lê Na

Ngành khoa học máy tính

đổi chỗ thực hiện xong thì khoá chốt sẽ nằm đúng vị trí
của nó và dÃy khoá đợc chia thành 2 phân đoạn. Đến đây
coi nh kết thúc một lợt sắp xếp. ở các lợt tiếp theo cũng áp
dụng kĩ thuật tơng tự đối với các phân đoạn thu đợc cho
đến khi dÃy khoá đợc sắp xếp xong
2.Ví dụ
Cho dÃy khoá:40 20 70 15 60 52 90 30 100 80 và chọn
khoá 40 làm khoá chốt.
Để phát hiện ra 2 khoá cần đổi chỗ cho nhau. Ngời ta sử
dụng hai biến chỉ số i và j với i=2, j=10.
Quá trình đổi chỗ đợc thực hiện nh sau:
-

So sánh 40 với Ki :
+ Nếu Ki<40 thì tăng i lên 1 và quá trình đợc
lặp lại.
+ Nếu Ki>40 thì chuyển sang bớc sau.

-

So sánh 40 với Kj:


Nếu Kj>40 thì giảm j đi 1 và quá trình đợc lặp lại cho
đến khi Kj<40.
-

Nếu i
quá trình đợc quay lại thực hiện bớc 1.
-

Nếu i>j thì khoá chốt 40 đợc đa vào đúng vị

trí của nó bằng cách đổi chỗ với Kj và dÃy khoá đợc chia làm
2 phân đoạn.
40

20

70

15

i=3

60

52

90


30

100

80

j=8

-ij=4
Hồ Thi Giang, Vũ Thị Diệp, Phan Thị Dung, Ngô Thị Thuỳ D- 16
ơng


Gvhd: TS. Phan Lê Na

40

20

30

Ngành khoa học máy tính

15

60

52


90

70

100

80

i=5

- i>j:
15

20

30

40

60

52

đoạn 1

90

70

100


80

đoạn 2

3. Thuật toán
Procedure Part(K,L,r,j);
1.

i:=l+1; j:=r;

2.

while i<=j do

Begin
3. while K[i]4. while K[j]>K[l] do j:=j+1;
5. if i
Begin
K[i]<=> K[j];
i:=i+1;
j:=j-1;
End;
End;
6. K[l]<=> K[j];

Return;
4.Cài đặt thuật toán

PROGRAM phandoan;
uses crt;
type mang=array[0..30]of integer;
Hồ Thi Giang, Vũ Thị Diệp, Phan Thị Dung, Ngô Thị Thuỳ D- 17
¬ng


Gvhd: TS. Phan Lê Na

Ngành khoa học máy tính

var k:mang;
f:text;
n,l,r:integer;
{-------------------------------------}
procedure inmang(k:mang; n:integer);
var i:integer;
begin
for i:=1 to n do
write(k[i]:4);
end;
{--------------------------------------}
procedure doicho(var a,b:integer);
var tg:integer;
begin
tg:=a; a:=b; b:=tg;
end;
{----------------------------------------}
procedure part(var k:mang; l,r:integer; var j:integer);
var i:integer;

begin
i:=l+1;
j:=r;
while i<=j do
begin
while(k[i]while(k[j]>k[l]) do j:=j-1;
if i<=j then
begin
Hå Thi Giang, Vị ThÞ Diệp, Phan Thị Dung, Ngô Thị Thuỳ D- 18
ơng


Gvhd: TS. Phan Lê Na

Ngành khoa học máy tính

doicho(k[i],k[j]);
i:=i+1;
j:=j-1;
end;
end;
doicho(k[l],k[j]);
end;
{---------------------------------------}
procedure quickSort(var k:mang; l,r:integer);
var j:integer;
begin
if lbegin

part(k,l,r,j);
quickSort(k,l,j-1);
quickSort(k,j+1,r);
end;
end;
{-------------------------------------------}
begin
clrscr;
assign(f,'dayso.pas');
reset(f);
while not eof(f) do
begin
n:=n+1;
read(f,k[n]);
end;
Hå Thi Giang, Vũ Thị Diệp, Phan Thị Dung, Ngô Thị Thuỳ D- 19
¬ng


Gvhd: TS. Phan Lê Na

Ngành khoa học máy tính

close(f);
writeln('==========DOC

DU

LIEU


TU

TEP===========');
writeln(' ----------*SAP XEP PHAN DOAN*-----------');
writeln('Mang chua sap xep');
inmang(k,n);
writeln;
writeln('Mang sau khi sap xep');
quickSort(k,l,n);
inmang(k,n);
readln;
end.
KÕt quả

V.Sắp xếp vun đống
1.Giới thiệu phơng pháp
Sắp xếp vun đống đợc chia làm hai giai đoạn:
+ Giai đoạn thứ nhất:

Hồ Thi Giang, Vũ Thị Diệp, Phan Thị Dung, Ngô Thị Thuú D- 20
¬ng


Gvhd: TS. Phan Lê Na

Ngành khoa học máy tính

Cây nhị phân hoàn chỉnh biểu diễn bằng khoá đợc
biến đổi để trở thành một đống


gọi là giai đoạn tạo

đống.
Đống là cây nhị phân hoàn chỉnh mà mỗi nút đợc gắn
một giá trị khoá sao cho khoá ở nút cha bao giớ cũng lớn hơn
khoá ở các nút con của nó.
Nh vậy, nếu nút cha có vị trí là i thì các nót con cđa nã
nÕu cã cđa nã ë vÞ trÝ lµ 2*i vµ 2*i+1 vµ ta cã: K[i]>K[2*i]
vµ K[i]>K[2*i+1].
Nh vËy, khoá ở nút gốc của đống là khoá lớn nhất so với
mọi khoá trên cây và ta gọi là khoá trội.
+ giai đoạn 2:
Là giai đoạn sắp xếp, ở đây nhiều lợt xử lý đợc thực
hiện mỗi lợt ứng với thao tác sau:
- Đa khoá trội về đúng vị trí của nó bằng cách
đổi chỗ với khoá nằm sau cùng trong cấu trúc lu
trữ đống.
- Loại khoá trội ra khỏi cây
- Vun lại thành đống đối với cây gồm các khoá
còn lại
2.Ví dụ:
Cho dÃy khoá : 40 20 70 15 60 52 90 30 100 80
Trớc tiên ta vẽ cây nhị phân hoàn chỉnh.
40
20

70

15


60

52

90
30

100

80

Hồ Thi Giang, Vũ Thị Diệp, Phan Thị Dung, Ngô Thị Thuỳ D- 21
ơng


Gvhd: TS. Phan Lê Na

Ngành khoa học máy tính

- Hình ảnh của đống qua các bớc sắp xếp
+ Vun đống lần đầu tiên, ta có cây
100
80

90

30

60


52

70
20

15

40

Đổi chỗ 100 với 40, loại 100 và vun đống
90
80
30

70
60

52

40
20

15
Kq={100}

+ Đổi chỗ 90 cho 15 , loại 90 và vun đống
80
70
60
30


52

40

20
15
Kq={90,100}
Hồ Thi Giang, Vũ Thị Diệp, Phan Thị Dung, Ngô Thị Thuỳ D- 22
ơng


Gvhd: TS. Phan Lê Na

Ngành khoa học máy tính

+ Đổi chỗ 80 cho 15 , loại 80 và vun đống
70
60

52

30

40

20

15
Kq={80,90,100}

+ Đổi chỗ 70 cho 15 , loại 70 và vun đống
60
52
40
30

20

15

Kq={70,80,90,100}
+ Đổi chỗ 60 cho 15 , loại 60 và vun đống

52
40

30

20

15

Kq={60,70,80,90,100}
+ Đổi chỗ 52 cho 15 , loại 52 và vun đống
40
30

20

Hồ Thi Giang, Vũ Thị Diệp, Phan Thị Dung, Ngô Thị Thuỳ D- 23

ơng


Gvhd: TS. Phan Lê Na

Ngành khoa học máy tính

15
Kq={52,60,70,80,90,100}
+ Đổi chỗ 40 cho 15 , loại 40 và vun đống
30
20

15

Kq={40,52,60,70,80,90,100}
+ Đổi chỗ 30 cho 15 , loại 30 và vun đống
20
15
Kq={30,40,52,60,70,80,90,100}
+ Đổi chỗ 20 cho 15 , loại 20 và vun đống
15
Kq={20,30,40,52,60,70,80,90,100}
+ Loại 15 ta có kết quả sắp xếp:
Kq={15,20,30,40,52,60,70,80,90,100}
3. Thuật toán
Ta thấy nút lá có thể đợc coi là cây con đà thoả mÃn tính
chất của đống. Nh vậy, việc vun đống đợc tiến hành từ đáy
lên và quy về phép xử lý.
Vun đống cho một cây mà cây con trái và cây con phải

của gốc đà là đống rồi. Do đó để đi tới một giải thuật sắp
xếp hoàn chỉnh ta phải xây dựng thuật toán vun đống.
Ngoài ra cũng cần phải chú ý rằng đối với cây nhị phân
hoàn chỉnh co n nút thì các nút có chØ sè tõ n div 2 trë xíng
míi cã thĨ là cha của nút khác.
Hồ Thi Giang, Vũ Thị Diệp, Phan Thị Dung, Ngô Thị Thuỳ D- 24
ơng


Gvhd: TS. Phan Lê Na

Ngành khoa học máy tính

Giải thuật sau thực hiện vun đống cây nhị phân gốc i
mà câycon trái và cây con phải của nó. nghĩa là các cây
có gốc 2*i và 2*i+1 đà là đống rồi, không có nút nào của
cây có chỉ số lớn hơn n
+ vun đống:
Procedure VunDong(i,n);
1.{Khởi tạo}
Key:=k[i];{key nhận giá trị khoá ở nót gèc i}
j:=2*i;{j n»m ë nót con phÝa tr¸i}Ën gi¸ trị khoá ở nút
gốc i}
1. while j<=n do
begin
3. {nếu khoá con phải lớn hơn thì j ghi nhận số thứ tự
của nó}
if (j4.


{Khoá cha lớn hơn khoá con}
if key>k[j] then
begin
k[j/2]:=key;
return;
end;
5.

{Đa khoá con lớn lên}

K[j/2]:=k[j]
j:=2*j;
end;
6.

k[j/2]:=key;

7.

Return;

+ Sắp xếp
Procedure HeapSort(K,n)
Hồ Thi Giang, Vũ Thị Diệp, Phan Thị Dung, Ngô Thị Thuỳ D- 25
ơng


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

Tải bản đầy đủ ngay
×