Hàm dùng cho sắp xếp mảng - nhờ test hộ và góp ý

Liên hệ QC

siwtom

Thành viên gắn bó
Tham gia
19/3/08
Bài viết
2,127
Được thích
4,207
Tôi đã viết từ lâu một hàm để sắp xếp có những chức năng: cho phép sắp xếp tới 3 cột - bắt chước Excel mà (1 cột phải có, 2 cột là tùy chọn), tăng giảm mỗi cột riêng biệt, sắp xếp cả cột có tiếng Việt, thậm chí có thể chọn phân biệt chữ hoa, thường.

Tôi cũng có ý định viết 1 hàm "đơn giản hơn và nhẹ hơn": Chỉ sắp xếp 1 cột, cột sắp xếp không có ký tự Việt - chỉ chứa số hoặc chữ hoặc cả chữ và số, sắp xếp tăng giảm. Tôi nghĩ là hàm như thế sẽ có nhiều ứng dụng hơn. Ý định là thế nhưng do lười và do chán nản phát sinh từ những lần "đụng độ" trên diễn đàn nên chưa làm.

Nay tôi đã viết xong hàm "đơn giản" kia - QuickSort1DArray và QuickSort2DArray. Rất mong mọi người test hộ và góp ý:

1. Tốc độ. Tôi nghĩ tốc độ nhanh
2. Về cột sắp xếp: mong mọi người test hộ các trường hợp chỉ toàn chữ, chỉ toàn số, dữ liệu số và chữ lẫn lộn (trong ví dụ đính kèm thì tôi thử test cột E - cột 5 là cột có cả số và chữ cái)
3. Nếu ai có csdl cỡ 500.000 dòng thì test hộ.

Để xem được các ghi chú thì trong VBA: Tools --> Options --> Editor Format --> mục Font --> chọn Times New Roman (vietnamese)

Tâp tin hơi nặng (bảng dữ liệu 11 cột, 41105 dòng) nên tôi đặt trên mediafire

http://www.mediafire.com/?xced8r47uezqrta
 
Tôi cũng có ý định viết 1 hàm "đơn giản hơn và nhẹ hơn": Chỉ sắp xếp 1 cột, cột sắp xếp không có ký tự Việt - chỉ chứa số hoặc chữ hoặc cả chữ và số, sắp xếp tăng giảm. Tôi nghĩ là hàm như thế sẽ có nhiều ứng dụng hơn
Trên diễn đàn mọi người vẫn mong có được 1 công cụ sắp xếp tiếng Việt hơn anh à!



2. Về cột sắp xếp: mong mọi người test hộ các trường hợp chỉ toàn chữ, chỉ toàn số, dữ liệu số và chữ lẫn lộn (trong ví dụ đính kèm thì tôi thử test cột E - cột 5 là cột có cả số và chữ cái)
3. Nếu ai có csdl cỡ 500.000 dòng thì test hộ.
Đúng là tốc độ tuyệt hảo thật
 
Upvote 0
Tôi đã viết từ lâu một hàm để sắp xếp có những chức năng: cho phép sắp xếp tới 3 cột - bắt chước Excel mà (1 cột phải có, 2 cột là tùy chọn), tăng giảm mỗi cột riêng biệt, sắp xếp cả cột có tiếng Việt, thậm chí có thể chọn phân biệt chữ hoa, thường.

Tôi cũng có ý định viết 1 hàm "đơn giản hơn và nhẹ hơn": Chỉ sắp xếp 1 cột, cột sắp xếp không có ký tự Việt - chỉ chứa số hoặc chữ hoặc cả chữ và số, sắp xếp tăng giảm. Tôi nghĩ là hàm như thế sẽ có nhiều ứng dụng hơn. Ý định là thế nhưng do lười và do chán nản phát sinh từ những lần "đụng độ" trên diễn đàn nên chưa làm.

Nay tôi đã viết xong hàm "đơn giản" kia - QuickSort1DArrayQuickSort2DArray. Rất mong mọi người test hộ và góp ý:

1. Tốc độ. Tôi nghĩ tốc độ nhanh
2. Về cột sắp xếp: mong mọi người test hộ các trường hợp chỉ toàn chữ, chỉ toàn số, dữ liệu số và chữ lẫn lộn (trong ví dụ đính kèm thì tôi thử test cột E - cột 5 là cột có cả số và chữ cái)
3. Nếu ai có csdl cỡ 500.000 dòng thì test hộ.

Để xem được các ghi chú thì trong VBA: Tools --> Options --> Editor Format --> mục Font --> chọn Times New Roman (vietnamese)

Tâp tin hơi nặng (bảng dữ liệu 11 cột, 41105 dòng) nên tôi đặt trên mediafire

http://www.mediafire.com/?xced8r47uezqrta
code chạy cự nhanh. nhưng nếu có 1 dòng trống thì dữ liệu bên dưới dòng này không sort được bác siwtom ơi.
 
Upvote 0
code chạy cự nhanh. nhưng nếu có 1 dòng trống thì dữ liệu bên dưới dòng này không sort được bác siwtom ơi.

Bạn có thể nói rõ hơn được không? Hoặc bạn chỉ ra một dữ liệu ngắn gọn để tôi test.
Vì khi tôi test qua loa thì tất cả các dòng trống sau khi sắp xếp sẽ bị đưa lên đầu còn các dòng khác thì sắp xếp đúng.
Nhiều khi thì đúng như người đời đã nói: cái "lỗi" của người khác thì như con voi, nhìn rõ mồn một, nhưng "lỗi" của mình sao nó cứ như con kiến ấy, nhìn mỏi mắt không thấy. Vì thế tôi mới nhờ mọi người test hộ.
 
Upvote 0
Nói về thuật toán sắp xếp, nói ra đáng buồn chứ mình xem các video clip này mấy lần mà chỉ hiểu hơi hơi, chỉ đoán siwtom đang dùng quick sort.

So sánh thuật toán bubble sort và quick sort:

http://www.youtube.com/watch?v=vxENKlcs2Tw

So sánh các loại sort:

http://www.youtube.com/watch?feature=player_detailpage&v=t8g-iYGHpEA

Quick sort:

http://www.youtube.com/watch?v=ywWBy6J5gz8&feature=related

Bubble sort:

http://www.youtube.com/watch?v=lyZQPjUT5B4&feature=relmfu

Merge sort:

http://www.youtube.com/watch?v=XaqR3G_NVoo&feature=relmfu

Select Sort:

http://www.youtube.com/watch?v=Ns4TPTC8whw&feature=relmfu

Insert sort:

http://www.youtube.com/watch?v=ROalU379l3U&feature=relmfu

Shell sort:

http://www.youtube.com/watch?v=CmPA7zE8mx0&feature=relmfu
 
Lần chỉnh sửa cuối:
Upvote 0
Chán anh ku Nghĩa! Bài 1 anh siwtom viết thế này:
Tôi đã viết từ lâu một hàm để sắp xếp có những chức năng: cho phép sắp xếp tới 3 cột - bắt chước Excel mà (1 cột phải có, 2 cột là tùy chọn), tăng giảm mỗi cột riêng biệt, sắp xếp cả cột có tiếng Việt, thậm chí có thể chọn phân biệt chữ hoa, thường.
File tải về, thay cột C bằng tiếng Việt có dấu, nhấn nút xem.
 
Upvote 0
Chán anh ku Nghĩa! Bài 1 anh siwtom viết thế này:

File tải về, thay cột C bằng tiếng Việt có dấu, nhấn nút xem.

Hình như Sư phụ chưa Test thì phải, em sắp xếp không được tiếng Việt nha. Sắp xếp ví dụ từ Âu Dương Lân, nó nằm tuốt luốt dưới đáy đại dương đấy!

=======================
Vấn đề hàm này:

Public Sub QuickSort1DArray(Arr, iLo As Long, iHi As Long, ByVal sortAtoZ As Boolean)

Theo em nghĩ cái màu đỏ là thừa vì nó làm cho người dùng phải thêm 1 động tác nữa, trong khi ta có thể viết:

Public Sub QuickSort1DArray(Arr, ByVal sortAtoZ As Boolean)
Dim iLo As Long, iHi As Long
iLo = LBound(Arr): iHi = UBound(Arr)

Có phải như thế làm cho người ta tiện việc hơn không nhỉ?
 
Upvote 0
Hình như Sư phụ chưa Test thì phải, em sắp xếp không được tiếng Việt nha. Sắp xếp ví dụ từ Âu Dương Lân, nó nằm tuốt luốt dưới đáy đại dương đấy!

Dưới cùng hay dưới đáy đại dương hả bạn? Nếu là "dưới đáy đại dương" thì tôi hiểu là câu mỉa mai. Nhưng trước khi mỉa mai ai đó thì tôi khuyên bạn nên đọc kỹ bài của người ta.

Tôi trích lại

Tôi đã viết từ lâu một hàm để sắp xếp có những chức năng: cho phép sắp xếp tới 3 cột - bắt chước Excel mà (1 cột phải có, 2 cột là tùy chọn), tăng giảm mỗi cột riêng biệt, sắp xếp cả cột có tiếng Việt, thậm chí có thể chọn phân biệt chữ hoa, thường.

Tôi cũng có ý định viết 1 hàm "đơn giản hơn và nhẹ hơn": Chỉ sắp xếp 1 cột, cột sắp xếp không có ký tự Việt - chỉ chứa số hoặc chữ hoặc cả chữ và số, sắp xếp tăng giảm. Tôi nghĩ là hàm như thế sẽ có nhiều ứng dụng hơn. Ý định là thế nhưng do lười và do chán nản phát sinh từ những lần "đụng độ" trên diễn đàn nên chưa làm.

Nay tôi đã viết xong hàm "đơn giản" kia - QuickSort1DArray và QuickSort2DArray. Rất mong mọi người test hộ và góp ý:

"Tôi cũng có ý định viết 1 hàm "đơn giản hơn và nhẹ hơn": Chỉ sắp xếp 1 cột, cột sắp xếp không có ký tự Việt"
...
"Nay tôi đã viết xong hàm "đơn giản" kia - QuickSort1DArray và QuickSort2DArray"

Tức "QuickSort1DArray và QuickSort2DArray" là hàm "đơn giản" kia. Mà hàm "đơn giản hơn và nhẹ hơn": Chỉ sắp xếp 1 cột, cột sắp xếp không có ký tự Việt".

Tôi đã viết rất rõ ràng là: "Chỉ sắp xếp 1 cột, cột sắp xếp không có ký tự Việt"

Bạn không đọc à? Đọc không hiểu à?
 
Upvote 0
Trên phương diện của người dùng thì file này chưa thể sử dụng ,vì chưa hoàn thiện các nội dung đề ra " cho phép sắp xếp tới 3 cột...." (1 cột phải có, 2 cột là tùy chọn) , mà ở đây mới chỉ là xắp xếp có 1 cột ( E) với dữ liệu 41.105 dòng ; hơn nữa là file còn đang trong vòng thử nghiệm .

Sơ bộ test qua code 1 cột này em thấy có vài điểm sau :
a / Về tốc độ của file :
* Test với chú voi con 41.105 dòng : Kết quả chú voi này chạy nhanh cực kỳ! rất tuyệt..
* Test với con kiến càng 2.000 dòng : Kết quả thì chú kiến này " ngủ đông " ?( e xóa từ dòng 2001 về sau )

b / Về dung lượng file :
* file sortArray.xlsm : 3.159mb >>> file soortArray.xls : 7.879 mb .( nguyên gốc )
* Test lần 1,2, 3... : 11.885 mb ( dung lượng tăng đáng kể ).

Những mong thầy sẽ hoàn thành mục tiêu “ xắp xếp 3 cột “ với nhiều chức năng đã đề ra ,để cho 80% thành viên GPE không biết gì về VBA được sử dụng chương trình này ; nhưng phải “ bé tí xíu “ mà em đã từng gặp .
 
Upvote 0
Trên phương diện của người dùng thì file này chưa thể sử dụng ,vì chưa hoàn thiện các nội dung đề ra " cho phép sắp xếp tới 3 cột...." (1 cột phải có, 2 cột là tùy chọn) , mà ở đây mới chỉ là xắp xếp có 1 cột ( E)
Bạn đọc bài của tôi nhanh quá nên hiểu sai rồi

Trích
Tôi đã viết từ lâu một hàm để sắp xếp có những chức năng: cho phép sắp xếp tới 3 cột - bắt chước Excel mà (1 cột phải có, 2 cột là tùy chọn), tăng giảm mỗi cột riêng biệt, sắp xếp cả cột có tiếng Việt, thậm chí có thể chọn phân biệt chữ hoa, thường.

Tôi cũng có ý định viết 1 hàm "đơn giản hơn và nhẹ hơn": Chỉ sắp xếp 1 cột, cột sắp xếp không có ký tự Việt - chỉ chứa số hoặc chữ hoặc cả chữ và số, sắp xếp tăng giảm. Tôi nghĩ là hàm như thế sẽ có nhiều ứng dụng hơn. Ý định là thế nhưng do lười và do chán nản phát sinh từ những lần "đụng độ" trên diễn đàn nên chưa làm.

Nay tôi đã viết xong hàm "đơn giản" kia - QuickSort1DArray và QuickSort2DArray

Chỗ xanh xanh chỉ là "chia sẻ, thổ lộ, khoe khoang" thôi

Tôi viết
Tôi cũng có ý định viết 1 hàm "đơn giản hơn và nhẹ hơn": Chỉ sắp xếp 1 cột, cột sắp xếp không có ký tự Việt

rồi tiếp theo

Nay tôi đã viết xong hàm "đơn giản" kia - QuickSort1DArray và QuickSort2DArray

Tức QuickSort1DArray và QuickSort2DArray là các hàm Chỉ sắp xếp 1 cột, cột sắp xếp không có ký tự Việt




với dữ liệu 41.105 dòng
; hơn nữa là file còn đang trong vòng thử nghiệm .

Sơ bộ test qua code 1 cột này em thấy có vài điểm sau :
a / Về tốc độ của file :
* Test với chú voi con 41.105 dòng : Kết quả chú voi này chạy nhanh cực kỳ! rất tuyệt..
* Test với con kiến càng 2.000 dòng : Kết quả thì chú kiến này " ngủ đông " ?( e xóa từ dòng 2001 về sau )

Bạn nên ghi rõ bạn test hàm nào. Thấy bạn nêu con số 41105 nên tôi đoán là hàm testQuickSort2DArray. Cái này dễ hiểu thôi: Trong code tôi có (vì chỉ là ví dụ)

Mã:
Arr = Range("[COLOR=#ff0000]A2:K41105[/COLOR]").Value

Tức vùng sort chỉ có 41104 dòng.

Ban xóa chỉ còn 2000 dòng nhưng do

Mã:
Arr = Range("[COLOR=#ff0000]A2:K41105[/COLOR]").Value

nên hàm vẫn sort 41104 dòng. Tức sort vùng có 2000 có dữ liệu và 39104 dòng trông. Và như ở trên bạn đã viết: chạy nhanh cực kỳ! rất tuyệt. Vậy thì cái mà bạn cho là "ngủ đông" ấy là do bạn nghĩ đấy là thời gian sort 2000 dòng. Nhưng thực chất đó là thời gian sort vùng có 41104 dòng


b / Về dung lượng file :
* file sortArray.xlsm : 3.159mb >>> file soortArray.xls : 7.879 mb .( nguyên gốc )
* Test lần 1,2, 3... : 11.885 mb ( dung lượng tăng đáng kể ).
Bạn ạ, việc test thì có liên quan gì tới dung lượbg? Dữ liệu vẫn thế thì dung lượng vễn thế chứ sao tăng đươc?
Chuyện convert sang XLS thì dung lượng tăng là điều dễ hiểu.
Mà tôi không biết bạn làm thế nào có những con số đo. Tập tin XLSM có dung lượng 3,01 MB (chỗ này khớp với của bạn). Sau khi save as XLS thì có dung lượng 11,3 MB (bạn nói là 7.879 MB). Test bao nhiêu lần tôi vẫn cọ 11,3 MB. Tóm lại XLSM = 3,01 MB và XLS = 11,3 MB thì đúng (khớp với của bạn) nhưng làm gì có chuyện dung lượng tăng. Bạn xem code thì cũng thấy hàm có ghi thêm dữ liệu ở chỗ bí mật nào đâu?
Những mong thầy sẽ hoàn thành mục tiêu “ xắp xếp 3 cột “ với nhiều chức năng đã đề ra
Cũng đã có trên diễn đàn nhưng tôi ngại tìm quá

để cho 80% thành viên GPE không biết gì về VBA được sử dụng chương trình này ; nhưng phải “ bé tí xíu “ mà em đã từng gặp .

Tôi không nghĩ thế. Gửi đã lâu nhưng tôi thấy ít ai quan tâm.
Còn chuyện "bé tí xíu" thì tôi không hiểu. Code thì nhẹ thôi nhưng trong tập tin dùng để test thì nó có tận 41105 với 11 cột mà.
Còn chuyện phải “ bé tí xíu “ mà em đã từng gặp thì tôi không dám.

Thôi tốt nhất bạn cứ tìm kiếm. Thiếu gì người viết code.

Tôi đã chấm dứt chủ đề về những hàm lọc này rồi và sẽ không bàn tới chúng nữa. Chỉ rổ mất thời gian rồi đau đầu.

Tôi đã nói chấm dứt là chấm hết thực sự.

Cám ơn bạn đã cho ý kiến. Nhưng bạn thấy đấy: bạn đã hiểu sai về bài viết của tôi.
 
Lần chỉnh sửa cuối:
Upvote 0
Tóm lại :
Ngủ đông :Với 41.105 dòng đã chạy nhanh như vậy ,thì với dữ liệu ít hơn 2o lần thì phải chạy nhanh hơn nhưng thực tế là không có chạy khác với có chạy với dòng trống và có DL.
Số liệu có được : e xài TC commander
Đúng – sai : do cách nhìn , quan điểm mỗi người.
Chấm dứt tức là chấm hết : hết bàn
Chào thầy !
 
Upvote 0
Web KT
Back
Top Bottom