Hiển thị các bài đăng có nhãn PROGRAMMING. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn PROGRAMMING. Hiển thị tất cả bài đăng

Bài Giảng Chuyên Đề: Liệt Kê - Đệ Quy - Quy Hoạch Động - Đồ Thị

Posted by Mạnh Chức Lê | Posted in | Posted on 4/25/2011

0

Video Học PHP và MySQL Tiếng Việt

Posted by Mạnh Chức Lê | Posted in | Posted on 4/03/2011

0

Học PHP & MySQL Tiếng Việt - CD 1




Link Download CD1 - Bao gồm 3 Part:

http://www.mediafire.com/?mzmtzjddmei
http://www.mediafire.com/?qnorim0tkzm
http://www.mediafire.com/?wnj3ncmzztg
Học PHP & MySQL Tiếng Việt - CD 2


Link Download CD2 - Bao gồm 3 Part:


http://www.mediafire.com/?ojdmj424ymd
http://www.mediafire.com/?uqfdwmy21z5
http://www.mediafire.com/?hontnxwk41y
Học PHP & MySQL Tiếng Việt - CD 3


Link Download CD3 - Bao gồm 4 Part:

http://www.mediafire.com/?ulh2eh1zmmn
http://www.mediafire.com/?yvzzymdmhgm
http://www.mediafire.com/?52zayzxjm2i
http://www.mediafire.com/?zmitdmtkdmm

[VB6] Open Dialog with review

Posted by Mạnh Chức Lê | Posted in | Posted on 8/04/2010

0

Tên: [VB6] Open Dialog with review
Loại:

Ngôn ngữ lập trình: VB6
Tác giả: sưu tầm
Chức năng: [VB6] Open Dialog with review





Link: OpenDialogWithReview.rar

[VB6]Unicode Full Control Version 2.2 [30/7/2010]

Posted by Mạnh Chức Lê | Posted in | Posted on 8/04/2010

0

Tên: Unicode Full Control
Loại: OCX
Ngôn ngữ lập trình: VB6
Tác giả: Dương Quốc Hưng
Chức năng: Hỗ trợ unicode và giao diện.


Download File OCX (*.RAR) : UFC v2.2.rar
UFC v2.2 with DockControl and Example
(880.52 KiB)


Download File Help (*.RAR) : Help.rar
Help for UFC
(530.2 KiB)


Download Example (Tương đối nhiều) :Example_UFC.rar(1.72 MiB)

Version 2.0 :
- UniTextbox :
+ CaptureEnter : bắt phím Enter
+ CaptureEsc : bắt phím ESC
+ CaptureTab : bắt phím Tab
+ CaptureTypingUnicode : Cho gõ unicode trực tiếp (nếu = False thì trong unikey phải chọn "Sử dụng Clipboard cho Unicode" mới gõ đc unicode)
- Fix lỗi Theme của UniTab, UniToolbar và 1 vài lỗi khác.
- UniDatePicer : Có thể gõ số trực tiếp, ko cần dùng các phím mũi tên (Gõ số trong cả kiểu LongDate)
- Fix lỗi sử dụng chuột cho các event Expand, Collapse của UniTreeView.
- Fix lỗi cho UniPropertyGrid
- Cập nhật hWnd cho UniListView
----------------------
Build 117
- Sửa lỗi ko lấy đc unicode từ Column của UniListview.
- Sửa lỗi MultiLine của UniListview.
- Cập nhật Locked và Fix 1 số lỗi nhỏ cho UniCombo.
- Fix vài bug khi sử dụng UniToolbar theo chiều dọc.
build 126
- Sửa lỗi SpinButton với UniTextbox.
- Sửa một vài lỗi nhỏ khi Align của UniToolbar là Left or Right.
- Thêm Theme cho UniListview (Sẽ Public cấu trúc sau).
- Add thêm Sub Background cho một số control (thuộc tính làm trong suốt).
- Sửa lỗi đã Looked mà vẫn select được item trong UniCombobox.


Version 2.2 :
- Nâng cấp MenuBar cho UniMenu (UniToolbar có thể tương đương với CommandBar)
- Fix một vài lỗi nhỏ và các lỗi đăng trên trang 17,18 bên box kia.


Một vài hình ảnh giới thiệu về MenuBar của UniToolbar :
Office 2003


WindowsXP


Office XP


and More.
Nếu muốn, bạn có thể tự tạo cho mình 1 theme rất dể dàng.


- Nếu đang trong lúc design time mà đột nhiên VB6 IDE hiện bảng thông báo "Don't Send" thì bạn cũng đừng bấm vào nút Don't Send làm gì, cứ kéo cái window đó sang một bên rồi code tiếp

Cách update các UFC phiên bản cũ lên phiên bản mới
Trước tiên các bạn tải cái này về :WinRegSvr.rar
Project dùng để Register và UnRegister OCX - DLL
(4.2 KiB)


1- Mở và chạy project chọn "Open File". Bấm nút "..." và tìm đến ocx cũ, bấm tiếp "UnRegister" để bỏ đăng ký.
Sau đó xóa ocx cũ đi, và chép ocx mới vào. Cũng dùng project trên và đăng ký ocx mới.
2-Tìm Project và mở bằng Notepad.exe.
Tìm dòng “Object={…}#...#0; UnicodeFullControl.ocx” và thay thế bằng “Object={1D8AB547-1323-4FDA-BEDB-A2759F814B83}#26.0#0; UnicodeFullControl.ocx”
Sau đó Save lại file Project. Mở Project lên sử dụng bình thường.


Nguồn: Câu Lạc Bộ VB

[Đề + Đáp Án] Hội Thi Tin Học Trẻ TP Hội An năm 2010 – Bảng C

Posted by Mạnh Chức Lê | Posted in | Posted on 6/18/2010

0

Bài 1: (3đ)
Nhập vào 1 mảng 2 chiều gồm có N hàng và M cột trong đó N,M lớn hơn 2 (có đặt giới hạn khi chạy chương trình). Sau đó tìm ở mảng 2 chiều trên những phần tử là số chính phương, in các số chính phương ra mảng 1 chiều rồi xuất mảng 1 chiều đó.

Bài 2: (3đ)

Lập trình tìm các cặp số "thân thiện" trong khoảng từ 1 đến 10000. Các cặp số thân thiện là các cặp số trong đó tổng các ­ước của số này (không kể chính nó) bằng số kia và ng­ược lại.

Bài 3: (4đ) (không rõ đề)

1. Nhập vào hồ sơ học sinh của 1 lớp n học sinh (n>0) bao gồm họ và tên, địa chỉ, điểm trung bình sau đó xuất ra file DANHSACH.TXT
2. Đọc từ file DANHSACH.TXT rồi xếp loại các học sinh (các loại bao gồm Giỏi, Khá, Trung Bình, Yếu) sau đó in ra màn hình danh sách học sinh gồm họ và tên, địa chỉ, điểm trung bình và xếp loại.

Bài Làm

Bài 1: CODE PASCAL
uses crt;
var b:array[1..100] of integer;
a:array[1..10,1..10] of integer;
i,j,k,n,m:byte;
begin
clrscr;
repeat write('Nhap vao so hang n='); Readln(n); until n>=2;
repeat write('Nhap vao so cot m='); Readln(m); until m>=2;
for i:=1 to n do
for j:=1 to m do
begin
write('A[',i,',',j,']='); readln(a[i][j]);
end;
k:=0;
for i:=1 to n do
for j:=1 to m do
if sqr(trunc(sqrt(a[i][j]))) = a[i][j] then
begin
inc(k);
b[k]:=a[i][j];
end;
writeln('Cac so chinh phuong o mang tren la: ');
if k=0 then writeln('Khong co so chinh phuong o mang tren');
for i:=1 to k do
write(b[i]:4);
readln
end.

Bài 2: CODE PASCAL
uses crt;
var n,i:longint;
function tongus(a:longint):longint;
var i,n,t:longint;
begin
t:=1;
for i:=2 to round(sqrt(a)) do
begin
if a mod i=0 then t:=t+i+a div i;
if i*i=a then t:=t-i;
end;
tongus:=t;
end;
begin
clrscr;
writeln('Cac cap so than thien tu 1 den 10000 la: ');
for i:=1 to 10000 do
begin
n:=tongus(i);
if (tongus(n)=i) and (i<=n) then
writeln(i:6,' ; ',n:-6);
end;
readln
end.

Bài 3: CODE PASCAL
uses crt;
type hoso=record
ten,dc:string[30];
dtb:integer;
xl:string[30];
end;
var a:array[1..100] of hoso;
fi,fo:text;
i,n:byte;
begin
clrscr;
write('Nhap so hoc sinh cua lop ban: '); readln(n);
assign(fo,'DANHSACH.TXT');
rewrite(fo);
for i:=1 to n do
with a[i] do
begin
write('Nhap ten cua hoc sinh thu ',i,': '); readln(ten);
write('Nhap dia chi cua hoc sinh thu ',i,': '); readln(dc);
write('Nhap diem trung binh cua hoc sinh thu ',i,': '); readln(dtb);
writeln(fo,ten);
writeln(fo,dc);
writeln(fo,dtb);
end;
close(fo);
assign(fi,'DANHSACH.TXT');
reset(fi);
For i:=1 to n do
with a[i] do
Begin
readln(fi,ten);
readln(fi,dc);
readln(fi,dtb);
End;
close(fi);
for i:=1 to n do
with a[i] do
if dtb>=8 then xl:='Gioi'
else if dtb>=6.5 then xl:='Kha'
else if dtb>=5 then xl:='Trung binh'
else xl:='yeu';
writeln('Danh sach cac hoc sinh: ');
for i:=1 to n do
with a[i] do
writeln(ten,' - ',dc,' - ',dtb,' - ',xl);
readln;
end.

DOWNLOAD
FILE .PAS: http://upload.ltv.vn/files/0ZV0JTEY/Tin Hoc Tre TP Hoi An .PAS.zip.html
FILE .EXE: http://upload.ltv.vn/files/13AJ0MJ2/Tin Hoc Tre TP Hoi An .EXE.zip.html

Bài giải bằng CODE C/C++ sẽ được cập nhật sau !

Các bài tập sử dụng thuật toán đệ quy

Posted by Mạnh Chức Lê | Posted in | Posted on 6/09/2010

0

Bài 1: Nhập vào 1 chuỗi (có độ dài không vượt quá 9), sau đó in ra màn hình các chuỗi hoán vị của chuỗi đó.

CODE PASCAL:

Program hoanvi;
Uses crt;
Const
maxLS = 255;
Var
s,t : string;
ls     : integer;
bo    : array [1..maxLS] of boolean;
i    : integer;
Procedure hvi(n:integer);
Var
i    : integer;
c    : char;
Begin
If (n = 0) then
Begin
writeln(t);
exit;
End;
For i:=1 to ls do
If bo[i] then
Begin
bo[i] := false;
t[n] := s[i];
hvi(n-1);
bo[i] := true;
End;
End;
Begin
clrscr;
write('Nhap vao 1 chuoi: ');
readln(s);
writeln('Cac chuoi hoan vi cua ',s,' la: ');
t := s;
ls := length(s);
for i:=1 to ls do
bo[i] := true;
hvi(ls);
readln;
End.

Ứng dụng: Tìm các hoán vị của 1 số tự nhiên (ít hơn 10 chữ số).

Thuật Toán Đệ Quy

Posted by Mạnh Chức Lê | Posted in | Posted on 6/07/2010

0

Định nghĩa: một đối tượng gọi là đệ quy nếu bao gồm chính nó hay nó được định nghĩa bởi chính nó.

Thủ tục đệ quy: một thủ tục gọi là đệ quy nếu trong quá trình thực hiện nó phải gọi đến chính nó nhưng với kích thước nhỏ hơn của tham số

Vd:

Function giaithua(n:word):integer;
begin
if n=0 then giaithua:=1
else giaithua:=giaithua(n-1)*n
end;

Cấu trúc của một thủ tục đệ quy:
--Phần cơ sở: trong đó chứa các tác động của thủ tục hoặc hàm với một giá trị cụ thể ban đầu của tham số
--Phần đệ quy: trong đó tác động cần được thực hiện cho giá trị hiện thời của các tham số được định nghĩa bằng các tác động đã được định nghĩa trước đây

Ưu điểm của đệ quy:
-Đệ quy mạnh mẽ ở chỗ có thể định nghĩa một tập rất lớn bởi một số hữu hạn các mệnh đề.

Thuật toán kiểm tra số nguyên tố

Posted by Mạnh Chức Lê | Posted in | Posted on 5/19/2010

0

Thuật toán của ta dựa trên ý tưởng: nếu n >1 không chia hết cho số nguyên nào trong tất cả các số từ 2 đến căn n thì n là số nguyên tố. Do đó ta sẽ kiểm tra tất cả các số nguyên từ 2 đến có round(sqrt(n)), nếu n không chia hết cho số nào trong đó thì n là số nguyên tố.
Nếu thấy biểu thức round(sqrt(n)) khó viết thì ta có thể kiểm tra từ 2 đến n div 2.
Hàm kiểm tra nguyên tố nhận vào một số nguyên n và trả lại kết quả là true (đúng) nếu n là nguyên tố và trả lại false nếu n không là số nguyên tố.

function ngto(n:integer):boolean;
var i:integer;
begin
ngto:=false;
if n<2 then exit;
for i:=2 to trunc(sqrt(n)) do
if n mod i=0 then exit; {nếu n chia hết cho i thì n không là nguyên tố => thoát luôn}
ngto:=true;
end;

Giáo trình lập trình pascal căn bản

Posted by Mạnh Chức Lê | Posted in | Posted on 5/18/2010

0

Hiện tại đa số các trường đại học đều dạy C/C++ khi học về tin học cơ bản. Tuy nhiên các bạn học sinh cấp 2, cấp 3 và vẫn còn một số trường đại học hay cao đẳng dạy PASCAL vì nó là một ngôn ngữ cơ bản, dễ học, dễ lập trình, dùng để học tập và nghiên cứu rất hay, cho nên mình post cuốn ebook “Lập trình PASCAL căn bản” này hy vọng là sẽ giúp ích cho các bạn trong việc học tập.

Cuốn sách gồm các bài sau:

  • Bài 1: Giới thiệu ngôn ngữ Pascal và các ví dụ đơn giản.
  • Bài 2: Các khái niệm cở bản của ngôn ngữ Pascal.
  • Bài 3: Hằng số, biến số, biểu thức và câu lệnh trong Pascal.
  • Bài 4: Các lệnh có cấu trúc trong ngôn ngữ Pascal.
  • Bài 5: Dữ liệu kiểu vô hướng liệt kê và kiểu đoạn con.
  • Bài 6: Kiểu tập hợp và kiểu mảng.
  • Bài 7: Chương trình con: thủ tục và hàm.
  • Bài 8: Kiểu xâu kí tự
  • Bài 9: Dữ liệu kiểu bản ghi và kiểu tệp.
  • Bài 10: Dữ liệu kiểu tệp.

Ngoài ra còn có một số bài tập trong phần thực hành. Chúc các bạn học tốt Link download: DOWNLOAD

Thuật toán sắp xếp nhanh (Quick sort)

Posted by Mạnh Chức Lê | Posted in | Posted on 5/12/2010

0

Ý tưởng
Ta chọn một phần tử bất kỳ của mảng A giả sử đó là x
Lọc và chia mảng đó thành 3 mảng con:
- mảng A1: A1(i) < x với mọi i - mảng A2: A2(i) = x với mọi i - mảng A3: A3(i) > x với mọi i
Sau đó ta lại tiếp tục các bước trên với mảng A1 và A3. Công việc này còn được gọi là phân hoạch nên Quick Sort còn được gọi là sắp xếp theo phương pháp phân hoạch
Giải thuật này sẽ được cài đặt theo phương pháp đệ qui

Thuật toán Sắp xếp Shell (Shell sort)

Posted by Mạnh Chức Lê | Posted in | Posted on 5/12/2010

0

Được phát minh bởi Donald Shell vào  năm 1959, Shell sort là thuật toán hiệu quả nhất trong nhóm các thuật  toán sắp xếp có độ phức tạp O(n2). Đương nhiên, Shell sort cũng phức tạp  nhất trong các thuật giải thuộc lớp này.


Shell sort là sự cải tiến của Insertion sort dựa vào hai nhận xét sau  đây:

  • Insertion sort sẽ rất hiệu quả nếu dữ liệu đầu vào hầu như đã  được sắp xếp (đã được xếp trong từng khoảng cục bộ).
  • Insertion sort hoạt động kém hiệu quả vì nó di chuyển các giá trị  phần tử mỗ i lần chỉ một vị trí.

Shell sort là môt thuật toán sắp xếp với số gia giãm dần, thường  được biết đến như là "comb sort" dành cho những khối chương trình hỗn  độn chưa được làm sạch. Thuật toán tạo ra nhiều luồng chạy duyệt qua  danh sách dữ liệu, và mỗi lần sắp xếp một số trong những tập dữ liệu  được định kích cở như nhau (tập phân đoạn được tách ra từ tập dữ liệu  ban đầu) dùng Insertion sort. Sau mỗi lần duyệt qua hết bộ dữ liệu thông  qua các phân đoạn (có kích thước giãm dần >= 1) , kích thước của tập  được sắp xếp trở nên lớn hơn, cho tới khi nó chứa toàn bộ danh sách dữ  liệu. (Chú ý rằng do kích thước của tập tăng lên, số lượng tập dữ liệu  cần được sắp xếp sẽ giảm dần) Điều này làm cho Insertion sort đạt tới  trường hợp tối ưu nhất, chạy mỗi vòng lặp với độ phức tạp tiến tới O(n).

Các phần tử chứa trong mỗi tập phân đoạn thì không liền kề nhau - cụ thể  hơn, nếu có i tập phân đoạn thì mỗi tập chứa các phần tử thứ i liên  tiếp kể từ điểm xuất phát của tập đó. Ví dụ, nếu có 3 tập phân đoạn thì  tập đầu tiên sẽ chứa những phần tử tại các vị trí 1, 4, 7 và cứ như thế  tiếp tục. Tập thứ hai sẽ chứa những phần tử tại các vị trí 2, 5, 8, và  cứ thế tiếp tục về sau; trong khi tập thứ ba sẽ chứa các phần tử ở vị  trí 3, 6, 9, và tương tự kế đó.

Thuật toán Sắp xếp trộn (Merge Sort)

Posted by Mạnh Chức Lê | Posted in | Posted on 5/12/2010

0

Merge sort chia danh sách dữ liệu  cần được sắp xếp thành hai nữa bằng nhau, và đặt chúng vào các vùng chứa  dữ liệu riêng biệt (list, array,...). Mỗi mảng dữ liệu được sắp xếp một  cách đệ quy, sau đó trộn lẫn vào nhau tạo thành danh sách dữ liệu được  sắp xếp cuối cùng. Giống như hầu hết các phương pháp sắp xếp đệ quy,  Merge sort có độ phức tạp là O(n log n).


Cách triển khai cơ bản của Merge sort là dùng ba mảng dữ liệu - mỗi mảng  để chứa mổi nữa của tập dữ liệu cần sắp xếp và một mảng chứa danh sách  được sắp xếp cuối cùng. Thuật toán được giới thiệu sau đây trộn các mảng  lại thành một, vì vậy chỉ sử dụng hai mảng cho toàn bộ quá trình xử lý.  Hiện nay cũng tồn tại phiên bản không đệ quy của Merge sort, nhưng  chúng không thu được bất kì một cải tiến tốc độ nào so với phiên bản đệ  quy qua thử nghiệm trên hầu hết các kiến trúc xử lý.

Merge sort thì nhanh hơn một ít so với Heap sort với các tập dữ liệu  lớn, nhưng nó đòi hỏi 2 lần bộ nhớ so với Heap sort vì vậy nó không được  ưa chuộng trong việc triển khai ứng dụng dù cho mục đích là gì - Quick  sort là lựa chọn tốt hơn cho thời gian và Heap sort thì lại là lựa chọn  tốt hơn với các tập dữ liệu rất lớn.

Thuật toán Sắp xếp chọn (Selection sort)

Posted by Mạnh Chức Lê | Posted in | Posted on 5/12/2010

0

Selection sort là một thuật toán sắp xếp khá  đơn giản nhằm cải tiến tốc độ cho bubble sort.
Nó làm việc bằng cách đầu tiên tìm phần tử nhỏ nhất trong tập dữ liệu  bằng cách tìm kiếm tuyến tính và hoán đổi vị trí phần tử đó với phần tử  đầu tiên trong tập dữ liệu, sau đó tìm phần tử nhỏ nhất thứ hai bằng  cách duyệt trong phạm vi các phần tử còn lại trừ phần tử đầu đã xếp  xong, và cứ như thế. Selection sort là thuật toán duy nhất xét về thời  gian chạy so với các thuật toán khác không bị ảnh hưởng bởi tình trạng  thứ tự của dữ liệu đầu vào, nó luôn thực hiện cùng số lượng các thao tác  do cấu trúc đơn giản của mình.

Thuật toán Sắp xếp chèn (Insertion sort)

Posted by Mạnh Chức Lê | Posted in | Posted on 5/12/2010

0

Thuật toán sắp xếp chèn làm việc  cũng giống như tên gọi - Nó thực hiện việc quét một tập dữ liệu, với mỗi  phân tử, thủ tục kiểm tra và chèn phần tử đó vào vị trí thích hợp trong  danh sách đích (chứa các phần tử đứng trước nó đã được sắp xếp) được  tiến hành.
Phương pháp dễ dàng nhất để thực hiện thuật toán này là dùng hai vùng  chứa dữ liệu khác nhau - tập dữ liệu nguồn và tập dữ liệu mà các phần tử  đã sắp xếp được chèn vào. Tuy nhiên để tiết kiệm bộ nhớ, hầu hết các  ứng dụng đều chỉ sử dụng một tập dữ liệu duy nhất. Thuật toán được tiến  hành bằng cách dịch chuyển phân tử hiện tại đang xét tuần tự qua những  phân tử ở vùng dữ liệu phía trước đã được sắp xếp, phép hoán vị nó với  phần tử liền kề được thực hiện một cách lặp lại cho tới khi tiến tới  được vị trí thích hợp.

Do với mỗi phân tử, insertion sort cần thực hiện so sánh với các phần tử  trước nó nên tối đa số lần duyệt dữ liệu là !N. Vì vậy cũng giống như  Bubble sort, Insertion sort được coi là có độ phức tạp O(n2). Mặc dù có  cùng độ phức tạp, Insertion sort hiệu quả hơn gần như hai lần so với  Bubble sort, tuy nhiên vẫn không hiệu quả với tập dữ liệu lớn.

Thuật toán sắp xếp vun đống – Heap sort

Posted by Mạnh Chức Lê | Posted in | Posted on 5/12/2010

0

Heap sort là thuật toán chậm nhất  trong số các thuật toán sắp xếp thuộc nhóm có độ phức tạp O(n log n),  nhưng không giống như Merge và Quick sort nó không đòi hỏi sự đệ quy  phức tạp hay nhiều mảng dữ liệu để xử lý. Điều này làm cho nó trở thành  một lựa chọn hấp dẫn với tập dữ liệu rất lớn hàng triệu phần tử. Tuy  nhiên sự lựa chọn thích hợp lúc nào cũng còn tùy thuộc vào kết cấu hạ  tầng và mục tiêu của ứng dụng.

Heap sort hoạt động cũng như sự gợi ý trong tên gọi - nó bắt đầu bằng  việc xây dựng một heap out của tập dữ liệu, và sau đó loại phần tử lớn  nhất và đặt nó vào vị trí cuối của mảng được sắp xếp. Sau việc xóa phần  tử lớn nhất, nó tái cấu trúc heap và di chuyển phần tử lớn nhất kế tiếp  còn lại và đặt nó vào vị trí mở kế cuối của mảng được sắp xếp. Thao tác  này được lặp lại cho tới khi không còn phần tử bên trái trong heap và  mảng được sắp xếp đã đầy. Cách triển khai căn bản đòi hỏi hai mảng dữ  liệu - một giữ heap và một giữ những phần tử đã được sắp xếp.

Việc thực hiện tiến trình sắp xếp chỉ trong một mảng duy nhất nhằm tiết  kiệm không gian của mảng thứ hai là cần thiết, giải thuật sau đây dùng  một ít kỉ xảo để chỉ sử dụng cùng một mảng cho lưu trử Heap và mảng đã  được sắp xếp. Bất cứ khi nào một phần tử được xóa khỏi Heap, nó giải  phóng một không gian lưu trử ở cuối mảng mà phần tử bị xóa có thể được  đặt vào.

Thuật toán sắp xếp nổi bọt (bubble sort)

Posted by Mạnh Chức Lê | Posted in | Posted on 5/12/2010

0

Thuật toán sắp xếp là nhóm các thuật  toán dùng để đặt các phần tử đã cho vào danh sách theo một thứ tự nào  đó. Thứ tự thường được sử dụng nhất là thứ tự số học (numerical) và thứ  tự từ điển (lexicographical). Có rất nhiều các thuật toán sắp xếp với  hiệu quả tính toán rất khác biệt, chính vì vậy việc hiểu để tìm ra thuật  toán thích hợp cho ứng dụng là quan trọng.

Bubble sort là một phương pháp đơn giản, rỏ ràng thường được dùng để  giảng dạy trong khoa học máy tính. Thuật toán bắt đầu duyệt từ điểm đầu  tiên của tập dữ liệu. Nó so sánh hai phần tử đầu tiên nếu phần tử đầu  lớn hơn phần tử thứ hai thì nó tiến hành hoán đổi vị trị giữa chúng. Cứ  như thế thao tác này được làm với mỗi cặp phần tử liền kề cho tới cuối  tập dữ liệu. Sau đó nó quay lại lặp lại tiến trình với hai phần tử đầu  tiên, quá trình lặp lại cho tới khi không có hiện tượng hoán đổi xảy ra  trong toàn bộ phạm vi duyệt. Mặc dù đơn giản, thuật toán này thật sự  không hiểu quả và hiếm khi được sử dụng trong thực tế ngoại trừ cho mục  đích giáo dục. Tuy nhiên với số lượng phần tử sắp xếp của dữ liệu nhỏ  (vd. 20) nó tốt hơn Quicksort.

Tổng hợp các thuật toán sắp xếp

Posted by Mạnh Chức Lê | Posted in | Posted on 5/12/2010

0

Một trong những vấn đề nền tảng của khoa học máy tính là sắp xếp một tập các phần tử cho trước theo thứ tự nào đó. Có rất nhiều các giải pháp cho vấn đề này, được biết đến như là các thuật toán sắp xếp (sorting algorithms). Bên cạnh các thuật toán sắp xếp đơn giản và rất rỏ ràng, như là sắp xếp nổi bọt (bubble sort). Một số khác, như phương pháp sắp xếp nhanh (quick sort) thì lại rất phức tạp nhưng đổi lại có kết quả thực thi nhanh hơn một cách đáng kể.

Dưới đây là liên kết tới các mô tả, phân tích, và mã nguồn cho 7 thuật toán sắp xếp quan trọng, phổ biến nhất hiện nay.

Bubble sort
Heap sort
Insertion sort
Merge sort
Quick sort
Selection sort
Shell sort