Tải bản đầy đủ (.pptx) (20 trang)

Tìm hiểu về ngôn ngữ C và cài đặt một số thuật toán sắp xếp.

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 (2.28 MB, 20 trang )

Trường Đại học Công nghệ thông tin và truyền thông
Khoa công nghệ thông tin

BÁO CÁO THỰC TẬP CƠ SỞ
Đề tài :

Tìm hiểu ngôn ngữ C# và cài đặt một số thuật toán sắp xếp

Sinh viên thực hiện

: Hoàng Vũ Thanh Thủy

Lớp

: HTTT-K12A

Giáo viên hướng dẫn : ThS.Nguyễn Thu Hương


Nội dung báo cáo

Chương I : Tổng quan về ngôn ngữ C#
1.1 Giới thiệu về ngôn ngữ C#
1.2 Ưu điểm của ngôn ngữ C#
1.3 Những cơ sở của ngôn ngữ C#

Chương II: Xây dựng mô phỏng
2.1 Giới thiệu một số thuật toán sắp xếp
2.2 Chạy demo chương trình



1.1 Giới thiệu về ngôn ngữ C#

.NET

Framework

.NET Framework là một nền tảng phát triển phổ biến để xây dụng
các ứng cho
 Window
 Window Store,
 Windows Phone,
 Window Server và
 Window Azure

.NET Framework bao gồm ngôn ngữ C#, Visual Basic, Common
Language Runtime và một thư viên ( class library) rộng lớn.
.


1.1 Giới thiệu về ngôn ngữ C#
 Ngôn ngữ C#
 C# là ngôn ngữ lập trình được phát triển từ C và C++ và được Microsoft rất chú trọng
đầu tư trong thời gian vừa qua.
 C# là một ngôn ngữ hướng đối tượng và an toàn cho phép các nhà phát triển dễ xây
dựng một loạt các ứng dụng an toàn và mạnh mẽ chạy trên .NET Framework.
 Sử dụng C# để tạo ra các ứng dụng truyền thống Windows, dịch vụ Web XML, thành
phần phân phối (components), ứng dụng dạng client-server, ứng dụng cơ sở dữ liệu, và
nhiều hơn thế nữa.

 Visual C# cung cấp một trình soạn thảo mã nguồn tiên tiến, thuận tiện việc thiết kế giao diện

người dùng (interface desinger), trình kiểm lỗi (debugger), và nhiều công cụ khác để làm cho nó
dễ dàng hơn cho việc phát triển các ứng dụng dựa trên phiên bản 4.0 của ngôn ngữ C# và
phiên bản 4.0 của .NET Framework.


1.2 Ưu điểm của ngôn ngữ C#

 C# là ngôn ngữ đơn giản

C# là ngôn ngữ hiện đại

 C# là ngôn ngữ ít từ khóa

 C#là ngôn ngữ hướng đối tượng

 C# là ngôn ngữ mạnh mẽ và cũng mềm dẻo


1.4 Những cơ sở của ngôn ngữ C#
 Các kiểu dữ liệu : 2 kiểu : giá trị và tham chiếu.
Biến kiểu giá trị được lưu trong vùng nhớ stack, còn biến kiểu tham chiếu được lưu trong vùng nhớ heap.



Biến và hằng :

Biến : Biến dùng để lưu trữ dữ liệu.Mỗi biến thuộc về một kiểu dữ liệu nào đó.
Cú pháp : [Kiểu dữ liệu] [Tên biến]
Hằng :Hằng là một biến nhưng giá trị không thay đổi theo thời gian
Cú pháp : Const [Kiểu dữ liệu] [Tên hằng] = giá trị;








Biểu thức: Bất kỳ câu lệnh định lượng giá trị được gọi là một biểu thức.
Khoảng trắng
Câu lệnh: Câu lệnh rẽ nhánh không điều kiện ,Lệnh rẽ nhánh có điều kiện( If..else, switch ..case) ,Lệnh lặp(do..while, while, for,goto).
Toán tử
Lớp và đối tượng
 Định nghĩa lớp.

Cú pháp : [attribute][bổ từ truy xuất] class định danh [:lớp cơ sở]
 Cách tạo đối tượng .
Tạo một đối tượng bằng cách khai báo kiểu và sau đó dùng từ khóa new để tạo như trong Java và C++.
 Cách sử dụng các thành viên tĩnh trong C#.
 Hủy đối tượng.
Đóng gói dữ liệu với Property : Phương thức get; set


CHƯƠNG 2:
XÂY DỰNG MÔ PHỎNG

2.1 Giới thiệu một số thuật toán sắp xếp
2.2 Chạy demo chương trình


2.1.1 Sắp xếp chọn ( Selection Sort)

Tư tưởng thuật toán

Chọn phần tử nhỏ nhất trong n phần tử ban đầu, đưa phần tử này về vị trí đầu tiên của dãy hiện hành. Sau
đó không quan tâm đến nó nữa, xem dãy hiện hành chỉ còn n-1 phần tử của dãy ban đầu, bắt đầu từ vị trí
thứ 2. Lặp lại quá trình trên cho dãy hiện hành đến khi dãy hiện hành chỉ còn một phần tử. Dãy ban đầu có
n phần tử, vậy tóm tắt ý tưởng thuật toán là thực hiện n-1 lượt việc đưa phần tử nhỏ nhất trong dãy hiện
hành về vị trí đúng ở đầu dãy.


2.1.1 Sắp xếp chọn ( Selection Sort)

Input: mảng A có n phần tử được nhập từ bàn phím
Output: Mảng A đã được sắp xếp.
 Bước 1: Khởi động i = 0
 Bước 2: Tìm phần tử nhỏ nhất a[min] trong dãy hiện
hành từ a[i] đến a[N]
 Bước 3: Hoán vị a[min] và a[i]
 Bước 4: i = i+1
Nếu i < N-1: quay trở lại bước 2
Ngược lại: STOP!


2.1.2 Sắp xếp chèn ( Insertion Sort)
Tư tưởng thuật toán

Sắp xếp chèn là một thuật toán sắp xếp bắt chước cách sắp xếp quân bài của những người
chơi bài. Muốn sắp một bộ bài theo trật tự người chơi bài rút lần lượt từ quân thứ 2, so với
các quân đứng trước nó để chèn vào vị trí thích hợp.
Giả sử ta có dãy a1, a2, …, an trong đó i phần tử đầu tiên a1, a2, …, ai đã có thứ tự. Ý
tưởng của thuật toán là tìm vị trị thích hợp và chèn phần tử a i+1 vào dãy đã có thứ tự trên

để có được một dãy mới có thứ tự. Cứ thế, làm đến cuối dãy ta sẽ được một dãy có thứ tự.

Các bước thực hiện


2.1.2 Sắp xếp chèn ( Insertion Sort)
Input : mảng A gồm n phần tử nhập từ bàn phím.
Output : Mảng A đã được sắp xếp
Bước 1: Khởi động i= 1// A[0] là phần tử đã sắp xếp.
Bước 2 : Tìm vị trí pos cần chèn trong đoạn A[1]…A[i-1]
pos= i-1
x =A[i]
Trong khi A[pos]>x và pos>=0
Dịch chuyển A[pos] sang phải 1 đơn vị để chuẩn bị chỗ chèn
cho x.
Bước 3 : A[pos+1] = x // chèn x vào dãy.
Bước 4 : i=i+1
Nêu iNgược lại: STOP


2.1.3 Sắp xếp nổi bọt ( Buble Sort)
 Tư tưởng thuật toán
Sắp xếp nổi bọt là một thuật toán sắp xếp đơn giản, với thao tác cơ bản là so sánh hai
phần tử kề nhau, nếu chúng chưa đứng đúng thứ tự thì đổi chỗ (swap). Có thể tiến hành
từ trên xuống (bên trái sang) hoặc từ dưới lên (bên phải sang). Sắp xếp nổi bọt còn có tên
là sắp xếp bằng so sánh trực tiếp. Nó sử dụng phép so sánh các phần tử nên là một giải
thuật sắp xếp kiểu so sánh.

 Các bước



2.1.3 Sắp xếp nổi bọt ( Buble Sort)
 Bước 1: Khởi động i = 0
 Bước 2: j = N -1//Duyệt từ cuối dãy về vị trí i
Trong khi j>i thực hiện:
Nếu a[j]j=j-1
 Bước 3: i = i + 1
Nếu i <= N-1: quay trở lại bước 2.


2.1.4 Sắp xếp nhanh ( Quick Sort)

 Tư tưởng thuật toán
 QuickSort chia mảng thành hai danh sách bằng cách so sánh từng phần tử của danh sách với một
phần tử được chọn được gọi là phần tử chốt. Những phần tử nhỏ hơn hoặc bằng phần tử chốt được
đưa về phía trước và nằm trong danh sách con thứ nhất, các phần tử lớn hơn chốt được đưa về phía
sau và thuộc danh sách con thứ hai. Cứ tiếp tục chia như vậy tới khi các danh sách con đều có độ dài
bằng 1.
 Có các cách chọn phần tử chốt như sau:
 Chọn phần tử đứng đầu hoặc đứng cuối làm phần tử chốt.
 Chọn phần tử đứng giữa danh sách làm phần tử chốt.
 Chọn phần tử trung vị trong 3 phần tử đứng đầu, đứng giữa và đứng cuối làm phần tử chốt.
 Chọn phần tử ngẫu nhiên làm phần tử chốt. (Cách này có thể dẫn đến khả năng rơi vào các trường
hợp đặc biệt)

 Sơ đồ khối của thuật toán



2.1.4 Sắp xếp nhanh ( Quick Sort)
Sắp xếp một đoạn bất kỳ X[L],...,X[R] với điều kiện L <
R
- Bước 1: M = (L+R) div 2, key=X[Mt]
- Bước 2: i=L+1, j=R
- Bước 3:
* Nếu X[i] < M thì i=i+1;
* Nếu X[j] > Mthì j=j-1;
- Bước 4: Nếu i>j thì đổi chổ X[i] với X[j], quay về Bước 3
- Bước 5: Lặp lại từ Bước 1 đến Bước 3 với đoạn
X[L],...,X[j-1] và X[j] đến X[R], dừng khi tất cả đoạn có
độ dài là 1. 


Bước 1: phần tử tại vị trí biến duyệt j là 06 nhỏ hơn tại vị trí biến duyệt ì là 17 nên ta đưa 06 xuống dãy mới và tăng j lên. Đồng thời,biến duyệt k cũng tăng lên 1

j

i

17

32

06

25

k


06

k

Bước 2: Phần tử tại vị trí I là 17 nhỏ hơn phần tử tại vị trí j là 25 nên ta đưa 17xuống dãy mới và tăng i lên 1, biến duyệt k cũng tăng lên 1.

j

i

17

25

32
k

06

17


Bước 3: phần tử tại vị trí biến duyệt j là 25 nhỏ hơn tại vị trí biến duyệt i là 32 nên đưa 25 xuống.

j

i

17


32

06

25

06

25

k

06

k

25

17

Bước 4:

17

32

k
06

17


25

32


2.1.5 Sắp xếp trộn ( Merge Sort)
 Tư tưởng thuật toán

Ðể sắp xếp dãy a 1 , a 2 , ..., a n , giải thuật Merge Sort dựa trên nhận xét sau:
Mỗi dãy a 1 , a 2 , ..., a n bất kỳ đều có thể coi như là một tập hợp các dãy con liên tiếp mà mồi dãy con đều đã có thứ tự.
=>Như vậy, một cách tiếp cận để sắp xếp dãy là tìm cách làm giảm số dãy con không giảm của nó. Ðây chính là hướng tiếp cận của thuật toán sắp
xếp theo phương pháp trộn.
Trong phương pháp Merge sort, mấu chốt của vấn đề là cách phân hoạch dãy ban đầu thành các dãy con. Sau khi phân hoạch xong, dãy ban đầu
sẽ được tách ra thành 2 dãy phụ theo nguyên tắc phân phối đều luân phiên. Trộn từng cặp dãy con của hai dãy phụ thành một dãy con của dãy
ban đầu, ta sẽ nhân lại dãy ban đầu nhưng với số lượng dãy con ít nhất giảm đi một nửa. Lặp lại qui trình trên sau một số bước, ta sẽ nhận được 1
dãy chỉ gồm 1 dãy con không giảm. Nghĩa là dãy ban đầu đã được sắp xếp.
Trộn trực tiếp: đây là phương pháp trộn đơn giản nhất. Việc phân hoạch dãy ban đầu đơn giản như sau: Với dãy ban đầu có n phân tử, ta cứ phân
hoạch thành n dãy con. Vì rằng mỗi dãy con chỉ có 1 phần tử nên nó là dãy có thứ tự. Cứ mỗi lần tách – trộn, chiều dài của dãy con sẽ được nhân
đôi.


2.1.5 Sắp xếp trộn ( Merge Sort)

 Bước 1 :
k = 1; // k là chiều dài của dãy con trong bước hiện hành
 Bước 2 :
Tách dãy a1, a2, ., an thành 2 dãy b, c theo nguyên tắc luân phiên
từng nhóm k phần tử:
b = a1, ., ak, a2k+1, ., a3k, .

c = ak+1, ., a2k, a3k+1, ., a4k, .
 Bước 3 :
Trộn từng cặp dãy con gồm k phần tử của 2 dãy b, c vào a.
 Bước 4 :
k = k*2;
Nếu k < n thì trở lại bước 2.
Ngược lại: Dừng


Kết luận

1.Kết quả đạt được
Dựa trên mục tiêu của đề tài “ Tìm hiểu ngôn ngữ C# và ứng dụng cài đặt một số thuật toán sắp xếp ” trong thời gian thực tập em đã đạt được kết
quả sau:
 Nắm vững về ngôn ngữ C#
 Hiểu và thiết kế mô phỏng thành công các thuật toán sắp xếp.
2. Những hạn chế của chương trình
Do thời gian nghiên cứu có hạn và khả năng chưa cao nên chương trình còn một số hạn chế sau:
- Độ dài mảng sắp xếp tối đa mới chỉ được 15 phần tử.
- Trong thuật toán merge sort mới chỉ cài đặt được thuật toán trộn trực tiếp là đơn giản nhất, em chưa cài đặt thành công thuật toán
trộn tự nhiên.
3. Hướng phát triển
Xây dựng mô phỏng thuật toán sắp xếp ngày một hoàn thiện và triển khai ứng dụng trong thực tế
Em rất mong ý kiến đóng góp của thầy cô và các bạn để chương trình của em được hoàn thiện hơn, rút kinh nghiệm và khắc phục
những thiếu sót trong những bài báo cáo sau.



×