Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
BÁO CÁO THỰC TẬP CƠ SỞ
ĐỀ TÀI: TÌM HIỂU MỘT SỐ THUẬT TOÁN SẮP
XẾP
Sinh viên thực hiện: Trần Đình Nguyên
Giáo viên hướng dẫ...
1.Nội dung chính
Một số kiến thức cơ bản.
Một số thuật toán sắp xếp.

Tìm hiểu ngôn ngữ Java.
Demo chương trình.
2.Một số kiến thức cơ bản
Thuật toán:
Khái niệm thuật toán sắp xếp:
Thuật toán là một tập hữu hạn các chỉ thị hay
phương...
Khái niệm thuật toán sắp xếp.
• Sắp xếp (sort) là một quá trình biến đổi

một danh sách các đối tượng thành một
danh sách...
3.Một số thuật toán sắp xếp
3.1. Sắp xếp chọn(Selection Sort)
3.1.1. Tư tưởng
 Đầu tiên chọn phần tử có khóa nhỏ nhất tro...
3.1.2. Thuật toán
Procedure SelectionSort;
Var I,j,k: integer;
min: Real;
Begin
for i:=1 to n-1 do
Begin
k:=1; min:= a[i];...
3.1.3. Độ phức tạp của thuật toán
T(n)=O(n2)

3.1.4. Ví dụ
Ban đầu: 5 6 2 2 10 12 9 10 9 3
Bước 1: 2| 6 5 2 10 12 9 10 9 3...
3.2. Sắp xếp chèn(Insretion
Sort).
3.2.1. Tư tưởng
 Lấy dần từng phần tử từ dãy nguồn, chèn vào dãy
đích sao cho đảm bảo ...
3.2. Thuật toán
Procedure InsertionSort;
Var i,j: Integer;
Begin
For i:=2 to n do
Begin
j:=i;
While (j>1) anh (a[j]<a[j-1]...
3.3. Độ phức tạp
T(n)=O(n2)

3.4. Ví dụ
Ban đầu: 5 6 2 2 10 12 9 10 9 3
Bước 1: 5 6
Bước 2: 2 5 6
Bước 3: 2 2 5 6
Bước 4: ...
3.3. Sắp xếp nổi bọt(Buble Sort)
3.3.1. Tư tưởng
 Bước 1: Xét các phần tử từ a[n] đến a[2], với mổi phần
tử a[j] so sánh ...
3.3.2. Thuật toán
Procedure BubbleSort;
Var i,j: integer;
Begin
1. For i:=1 to n do
2.
For j:=n downto i+1 do
3.
if(a[j]<a...
3.3.3. Độ phức tạp
T(n)=O(n)

3.3.4. Ví dụ
Bắt đầu
4
5
6
2
2
10
12
9
10
3

Bước 1
2
5
6
2
3
10
12
9
9

Bước 2

Bước 3

Bướ...
3.4. Sắp xếp nhanh(Quick Sort)
3.4.1. Tư tưởng
 Xét mảng A có các bản ghi từ a[1],…,a[n].
 Chọn một thành phần của mảng ...
3.4.2. Thuật toán
Procedure QuickSort(i,j : integer);
Var k: integer;
Begin
If(i<j) then
Begin
Partition(i,j,);
QuickSort(...
Procedure Partition(i,j: integer; var R:real);
Var L: integer;
P: kiểu phần tử mảng;
Begin
P:=A[i]; L:=I; R:=j+1;
Repeat L...
3.4.3. Độ phức tạp
T(n)=O(n)

3.4.4. Ví dụ


10 15 4 11 6 3 5 14

lấy chốt p=A[1]=10,L=1,R=9

 Lần thứ nhất: Ta có L=2 v...
3.5. Sắp xếp vun đống(Heap Sort)
3.5.1. Tư tưởng
 Heap là một cây nhị phân đầy đủ trái mà mổi nút
được gán một giá trị kh...
3.5.2. Thuật toán
Procedure PUSHdOWN(a,b:integer);
Var i,j: integer;
ok: Boolean;
Begin
i:=a; ok:= false;
1. While (i<=b d...
Sử dụng PUSHDOWN trong thủ tục HEAPSORT. Kết quả
được mảng A[1…n] xếp giảm dần.
Procedure HEAPSORT;
Var i: integer;
Begin
...
3.5.3. Độ phức tạp
T(n)=O(nlogn)

3.5.4. Ví dụ

2,3,5,6,4,1,5
Vun cây gốc A[3] được mảng A={2,3,7,6,4,1,5}
Vun cây gốc A[2...
4. Giới thiệu về ngôn ngữ Java
4.1. Java là gì?
Java là ngôn ngữ lập trình hướng đối tượng( tựa C++)
do Sun Microsystem đư...
4.2. Lịch sử phát triển
 Ngôn ngữ lập trình Java do James Gosling và các
công sự của Công ty Sun Microsystem phát triển.
...
4.3. Cấu trúc của Java
Công nghệ Java phát triển mạnh mẽ nhờ vào "đại gia Sun

Microsystem" cung cấp nhiều công cụ, thư v...
5. Demo
Code của chương trình.
Nhập dữ liệu cho chương trình.
Kết quả sau khi sắp xếp.
The end!
Thank for your watching!
Upcoming SlideShare
Loading in …5
×
Upcoming SlideShare
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
Next
Download to read offline and view in fullscreen.

4

Share

Download to read offline

TÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢN

Download to read offline

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

TÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢN

  1. 1. BÁO CÁO THỰC TẬP CƠ SỞ ĐỀ TÀI: TÌM HIỂU MỘT SỐ THUẬT TOÁN SẮP XẾP Sinh viên thực hiện: Trần Đình Nguyên Giáo viên hướng dẫn: Vũ Thị Thúy Thảo
  2. 2. 1.Nội dung chính Một số kiến thức cơ bản. Một số thuật toán sắp xếp. Tìm hiểu ngôn ngữ Java. Demo chương trình.
  3. 3. 2.Một số kiến thức cơ bản Thuật toán: Khái niệm thuật toán sắp xếp: Thuật toán là một tập hữu hạn các chỉ thị hay phương cách được định nghĩa rõ ràng cho việc hoàn tất một sự việc từ một trạng thái ban đầu cho trước; khi các chỉ thị này được áp dụng triệt để thì sẽ dẩn đến kết quả sau cùng như đã dự đoán.
  4. 4. Khái niệm thuật toán sắp xếp. • Sắp xếp (sort) là một quá trình biến đổi một danh sách các đối tượng thành một danh sách thỏa mãn một thứ tự xác định nào đó.
  5. 5. 3.Một số thuật toán sắp xếp 3.1. Sắp xếp chọn(Selection Sort) 3.1.1. Tư tưởng  Đầu tiên chọn phần tử có khóa nhỏ nhất trong n phần tử a[1] đến a[n] và hoán vị với phần tử a[1].  Chọn phần tử có khóa nhỏ nhất trong n-1 phần tử từ a[2] đến a[n] và hoán vị nó với a[2]…  Ở bước i, chọn phần tử có khóa nhỏ nhất trong n-i+1 phần tử từ a[i] đến a[n] và hoán vị nó với a[i].  Sau n-1 bước thì ta thu được mảng đã được sắp xếp.
  6. 6. 3.1.2. Thuật toán Procedure SelectionSort; Var I,j,k: integer; min: Real; Begin for i:=1 to n-1 do Begin k:=1; min:= a[i]; for j:=i+1 to n do If a[j]<min then Begin min:= a[j]; k:=j; End; Swap(a[i],a[k]); End; End;
  7. 7. 3.1.3. Độ phức tạp của thuật toán T(n)=O(n2) 3.1.4. Ví dụ Ban đầu: 5 6 2 2 10 12 9 10 9 3 Bước 1: 2| 6 5 2 10 12 9 10 9 3 Bước 2: 2 2| 5 6 10 12 9 10 9 3 Bước 3: 2 2 3| 6 10 12 9 10 9 5 Bước 4: 2 2 3 5| 10 12 9 10 9 6 Bước 5: 2 2 3 5 6| 12 9 10 9 10 Bước 6: 2 2 3 5 6 10 9 10 Bước 7: 2 2 3 5 6 9 9| 10 12 10 9| 12 Bước 8: 2 2 3 5 6 9 9 10| 12 10 Bước 9: 2 2 3 5 6 9 9 10 10 12
  8. 8. 3.2. Sắp xếp chèn(Insretion Sort). 3.2.1. Tư tưởng  Lấy dần từng phần tử từ dãy nguồn, chèn vào dãy đích sao cho đảm bảo dãy đích có thứ tự.  Bước 1: Chèn phần tử a[2] vào danh sách đã có thứ tự a[1] sao cho a[1], a[2] là một danh sách có thứ tự.  Bước i: Chèn phần tử a[i+1] vào danh sách đã có thứ tự a[1], a[2],…a[i] sao cho a[1], a[2], …a[i+1] là một danh sách có thứ tự.
  9. 9. 3.2. Thuật toán Procedure InsertionSort; Var i,j: Integer; Begin For i:=2 to n do Begin j:=i; While (j>1) anh (a[j]<a[j-1]) do Begin Swap (a[j],a[j-1]); j:=j-1; End; End; End;
  10. 10. 3.3. Độ phức tạp T(n)=O(n2) 3.4. Ví dụ Ban đầu: 5 6 2 2 10 12 9 10 9 3 Bước 1: 5 6 Bước 2: 2 5 6 Bước 3: 2 2 5 6 Bước 4: 2 2 5 6 10 Bước 5: 2 2 5 6 10 12 Bước 6: 2 2 5 6 9 10 12 Bước 7: 2 2 5 6 9 10 10 12 Bước 8: 2 2 5 6 9 9 10 10 12 Bước 9: 2 2 3 5 6 9 9 10 10 12
  11. 11. 3.3. Sắp xếp nổi bọt(Buble Sort) 3.3.1. Tư tưởng  Bước 1: Xét các phần tử từ a[n] đến a[2], với mổi phần tử a[j] so sánh nó vá khóa của phần tử a[j-1]. Nếu khóa của a[j] nhỏ hơn khóa của a[j-1] thì đổi chổ a[j] với a[j-1].  Bước 2: Xét các phần tử từ a[n] đến a[3], làm tương tự bước 1.  Bước i: Xét các phần tử từ a[n] đến a[i+1], làm tương tự  Sau n bước ta được dãy đã có thứ tự.
  12. 12. 3.3.2. Thuật toán Procedure BubbleSort; Var i,j: integer; Begin 1. For i:=1 to n do 2. For j:=n downto i+1 do 3. if(a[j]<a[j-1]) then 4. Swap(a[j],a[j-1]); End;
  13. 13. 3.3.3. Độ phức tạp T(n)=O(n) 3.3.4. Ví dụ Bắt đầu 4 5 6 2 2 10 12 9 10 3 Bước 1 2 5 6 2 3 10 12 9 9 Bước 2 Bước 3 Bước 2 2 5 6 3 9 10 12 10 2 2 3 5 6 9 9 10 10 2 2 3 5 6 9 9 10 12
  14. 14. 3.4. Sắp xếp nhanh(Quick Sort) 3.4.1. Tư tưởng  Xét mảng A có các bản ghi từ a[1],…,a[n].  Chọn một thành phần của mảng làm chốt(Pivot). Phân hoạch mảng thành hai phần bằng cách chuyển tất cả các thành phần có khóa lớn hơn chốt sang phải chốt, các thành phần có khóa bé hơn hoặc bằng chốt sang trái chốt.  Sắp xếp độc lập hai mảng con a[1,…k-1], a[k+1,…n] bằng cách gọi đệ quy thuật toán trên.
  15. 15. 3.4.2. Thuật toán Procedure QuickSort(i,j : integer); Var k: integer; Begin If(i<j) then Begin Partition(i,j,); QuickSort(i,k-1); QuickSort(k+1,j); End; End;
  16. 16. Procedure Partition(i,j: integer; var R:real); Var L: integer; P: kiểu phần tử mảng; Begin P:=A[i]; L:=I; R:=j+1; Repeat L:=L+1 util (A[L] > p) or (L>j); Repeat R:=R-1 util A[R] <= p; While L < R do Begin Swap(A[L],A[R]); Repeat L:=L+1 util A[L] > p; Repeat R:=R-1 util A[R] <= p; End; Swap(A[i],A[R]); End;
  17. 17. 3.4.3. Độ phức tạp T(n)=O(n) 3.4.4. Ví dụ  10 15 4 11 6 3 5 14 lấy chốt p=A[1]=10,L=1,R=9  Lần thứ nhất: Ta có L=2 và R=7 10 5 4 11 6 3 15 14  Khi L=4, R=6. 10 5 4 3 6 11 15 14  Khi L=6,R=5 6 5 4 3 10 11 15 14  Như vậy mảng A[1..8] đã được phân hoạch thành hai mảng con A[1..R-1] và A[R+1..8] tức A[1..4] và A[6..8]. Sau đó tiếp tục phân hoạch hai mảng con trên.
  18. 18. 3.5. Sắp xếp vun đống(Heap Sort) 3.5.1. Tư tưởng  Heap là một cây nhị phân đầy đủ trái mà mổi nút được gán một giá trị khóa sao cho giá trị khóa ở nút cha bao giờ củng nhỏ hơn hoặc bằng giá trị khóa ở hai nut con. Do đó trong Heap ta có:  Nút gốc có khóa bé nhất  Dãy khóa nhận được khi đi theo một đường bất kì là dãy có thứ tự tăng dần
  19. 19. 3.5.2. Thuật toán Procedure PUSHdOWN(a,b:integer); Var i,j: integer; ok: Boolean; Begin i:=a; ok:= false; 1. While (i<=b div 2) and not ok do Begin 2. If i=b div 2 then j:=2*i { chỉ có con trái } else if A[2*i] < A[2*i+1] then j:=2*i else j:=2*i+1; 3. If A[i] > A[j] then Begin Swap(A[i],A[j]); i:=j; End; else ok:=true; End; End;
  20. 20. Sử dụng PUSHDOWN trong thủ tục HEAPSORT. Kết quả được mảng A[1…n] xếp giảm dần. Procedure HEAPSORT; Var i: integer; Begin 1. for i:=n div 2 downto 1 do PUSHDOWN(i,n); { biến đổi mảng A[1..n] thành mảng Heap} 2. for i:=n downto 2 do Begin Swap(A[1],A[i]); //đổi chổ gốc PUSHDOWN(1,i-1); //vun lại đống End; End;
  21. 21. 3.5.3. Độ phức tạp T(n)=O(nlogn) 3.5.4. Ví dụ 2,3,5,6,4,1,5 Vun cây gốc A[3] được mảng A={2,3,7,6,4,1,5} Vun cây gốc A[2] được mảng A={2,6,7,3,4,1,5} Vun cây gốc A[1] được mảng A={7,6,5,3,4,1,2} Bây giờ A={7,6,5,3,4,1,2} đã là đống. Sắp xếp Đổi chổ A[1] với A[7]: A={2,6,5,3,4,1,7} và vun lại mảng A[1..6] được mảng A={6,4,5,3,2,1,7}. Đổi chổ A[1] với A[6]: A={1,4,5,3,2,6,7} và vun lại mảng A[1..5] được mảng A={5,4,2,3,1,6,7} Đổi chổ A[1] với A[5]: A={1,4,2,3,5,6,7} và vun lại mảng A[1..4] được mảng A={4,3,2,1,5,6,7} Đổi chổ A[1] với A[4]: A={1,3,2,4,5,6,7} vá vun lại mảng A[1..3] được mảng A={3,2,1,4,5,6,7} Đổi chổ A[1] với A[3]: A={2,1,3,4,5,6,7} và vun lại mảng A[1..2] được mảng A={2,1,3,4,5,6,7} Đổi chổ A[1] với A[2]: A={1,2,3,4,5,6,7} Mảng còn lại chỉ một phần tử quá trình sắp xếp đã xong.
  22. 22. 4. Giới thiệu về ngôn ngữ Java 4.1. Java là gì? Java là ngôn ngữ lập trình hướng đối tượng( tựa C++) do Sun Microsystem đưa ra vào giữa thập niên 90. Chương trình viết bằng ngôn ngữ java có thể chạy trên bất kì hệ điều hành nào có cài máy ảo java( Java Vitual Machine).
  23. 23. 4.2. Lịch sử phát triển  Ngôn ngữ lập trình Java do James Gosling và các công sự của Công ty Sun Microsystem phát triển.  Java được phát triển dựa trên C++ nhưng loại bỏ một số tính năng nguy hiểm của C++ và có khả năng chạy trên nhiều nền phần cứng khác nhau.  Java ra đời và được giới thiệu năm 1995.
  24. 24. 4.3. Cấu trúc của Java Công nghệ Java phát triển mạnh mẽ nhờ vào "đại gia Sun Microsystem" cung cấp nhiều công cụ, thư viện lập trình phong phú hỗ trợ cho việc phát triển nhiều loại hình ứng dụng khác nhau cụ thể như: J2SE (Java 2 Standard Edition) hỗ trợ phát triển những ứng dụng đơn, ứng dụng clientserver; J2EE (Java 2 Enterprise Edition) hỗ trợ phát triển các ứng dụng thương mại, J2ME (Java 2 Micro Edition) hỗ trợ phát triển các ứng dụng trên các thiết bị di động, không dây, …
  25. 25. 5. Demo
  26. 26. Code của chương trình.
  27. 27. Nhập dữ liệu cho chương trình.
  28. 28. Kết quả sau khi sắp xếp.
  29. 29. The end! Thank for your watching!
  • honghanhnguyen19

    Dec. 1, 2016
  • NgocDongDST

    Mar. 20, 2015
  • phth2817

    Jan. 15, 2015
  • tazan_boy0102

    May. 10, 2014

Views

Total views

11,190

On Slideshare

0

From embeds

0

Number of embeds

12

Actions

Downloads

218

Shares

0

Comments

0

Likes

4

×