Làm sao để đọc file có dữ liệu lớn vào bộ nhớ trong để sắp xếp

Em có 1 file được dữ liệu gồm 10000 thông tin sinh viên, bây giờ em muốn sắp xếp nó. Nếu bỏ 10000 thông tin vô thì không được do chương trình chỉ cho phép lưu 1000 thông tin. Vậy có cách nào để sắp xếp không. Nhờ mấy bác giúp ạ

Sắp xếp cái gì em ơi? STT, mã sv, hay điểm thi,…?

Ở đây anh đặt giả thuyết là em đang lưu thông tin của sinh viên vào một mảng chỉ cho chứa tối đa là 1000 phần tử. Giờ có 2 cách giải quyết:

  1. Giải pháp chống cháy: Sửa số phần tử tối đa trong mảng từ 1000 thành 10000

  2. Giải pháp bền vững: Thay luôn cái mảng đó thành vector, ưng lưu bao nhiêu cũng được(nhiều quá nặng máy nha).

Và cái cuối cùng: Cái này là bài tập về nhà hay vấn đề thực tế vậy? Mà khoan, đối với bài tập về nhà thì chẳng có ai giao thông tin của 10000 sinh viên cả, chừng đó là quá nhiều. Nếu đây là vấn đề thực tế thì cho anh hỏi: Tại sao em không dùng CSDL(database) :thinking: ?

3 Likes

Chia để trị - Divide and conquer.
Sắp xếp hợp nhất - Merge Sort.
Nếu yêu cầu chỉ cho phép cấp phát 1000 phần tử thì chia nhỏ tập tin ban đầu thành nhiều tập tin, sắp xếp từng tập tin bằng 1000 phần tử được cấp một cách lần lượt. Sau đó hợp nhất (Merge sort) từng tập tin thành 1 tập tin ban đầu.

6 Likes

Lưu ý là độ trễ của đĩa (tính bằng ms/us) vẫn rất lớn so với RAM (ns).

6 Likes

Thầy em có gợi ý, không sắp ngoại, không chia tập tin… chỉ dùng Quicksort + kỹ thuật lập trình vẫn có cách nào đó kéo 100000 sinh viên vào để sắp xếp mặc dù bộ nhớ không cho load, không biết anh có gợi ý gì không ạ?

Gió mạnh quá, thôi đợi thầy bạn sửa bài vậy.

6 Likes

Quăng lên Colab để nó sort giùm.

5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?