PDA

View Full Version : sắp xếp không dùng mảng



Tienlbhoc
23-09-2007, 08:05
Cách thông thường để sắp xếp một dãy số hay một dãy ký tự ghi ở một file nào đó là phải nạp vào một mảng, sắp xếp xong rồi ghi đè vào file đó hoặc vào file khác .mình hỏi , mọi người có biết cách nào sắp xếp nhanh mà không cần nạp vào mảng không.

nmd
23-09-2007, 10:16
Mình chưa biết cách như bạn muốn. Nhưng mình nghĩ việc đưa vào mảng, sắp xếp trong bộ nhớ là nhanh nhất rồi. Còn nếu làm trên file kô mà kô dùng bộ nhớ, mỗi lần đọc rồi lại ghi file nhiều lần như thế thì tốn thời gian hơn nhiều.

Tienlbhoc
23-09-2007, 11:06
các CSDL cũng có phần sắp xếp đó thôi, mà dung lượng của nó có thể lên đến vài trăm mb(hoặc hơn) , mình thấy nó làm được thì hỏi xem mọi người có cách nào không

Global
23-09-2007, 14:57
Sắp xếp trộn.. dùng trộn nhiều đường.. và sử dụng các file tạm trong thao tác phân phối..

Tienlbhoc
23-09-2007, 17:14
Vậy thì tốc độ suy giảm nhiều lắm ,thôi tui hỏi thế thôi, không cần kíp gì cái này cả.

Global
23-09-2007, 18:17
Ừ.. đương nhiên bạn à.. kích thước của bộ nhớ sử dụng và tốc độ luôn tỷ lt65 nghịch với nhau.. muốn tiếc kiệm RAM thì phải dùng file thôi ^^

Thực ra bạn có thể chia dãy thành các dãy con.. rồi chép lên RAM và xử lý từng phần.. sau đó trộn lại..

Chẳng hạn như nếu file có 100000 mẫu tin.. chia thành 100 file tạm.. sau đó sort từng phần rồi trộn lại.. như vậy ta chỉ chép lên RAM 1000 mẫu tin 1 lần thôi..

Cách này hiển nhiên là chậm hơn chép 100000 mẫu tin vào bộ nhớ.. nhưng sử dụng bộ nhớ nhiều hơn..

nowforever
01-10-2007, 23:49
CSDL thực tế nó xếp nhanh là vì nó ko hôt hết lên để xếp mà nó chỉ hốt lên cái nào cần xếp thôi. Còn data liên quan thì vẫn nằm im, chỉ khi nào trả data về nó mới hốt lên. Vì thế, trong oracle, DB của bạn mà sai index data là nó chạy lặc lè luôn (nếu ko mún nói là die, chỉ nói oracle vì oracle phụ thuộc nhiều vào index).
Đối với trường hợp của bạn, bạn chỉ cần lấy data cần xếp bỏ vào list, sort lại sau đó dựa trên list đó mà sắp xếp data trong file. Như thế sẽ nhanh hơn nhiều, đỡ code, và ít tốn bộ nhớ.