Bài toán sắp xếp chuỗi sử dụng đa luồng

Mong được mọi người giúp đỡ ạ, em có đề bài như thế này :

Viết chương trình sắp xếp 1 dãy số nguyên theo thứ tự tăng dần và ghi kết quả ra 1 file text có tên là output.txt , với các yêu cầu:

Dãy số nguyên đầu vào được cho trong 1 file text có tên là input.txt , mỗi số nguyên phân cách nhau bởi kí tự backspace hoặc kí tự xuống dòng.

Chương trình sử dụng n thread để sắp xếp đồng thời dãy số nguyên đó (vì số lượng phần tử của dãy số nguyên có thể là rất lớn, sử dụng multithreading để tối ưu tốc độ trên các CPU hỗ trợ xử lý multithreading), n sẽ được đưa vào trong tham số dòng lệnh.

Gợi ý giải thuật: Chia dãy số input thành n dãy con, mỗi dãy con sau đó sẽ được sắp xếp bởi 1 thread tương ứng. Sau khi n thread đã sắp xếp xong n dãy con ta thu được n dãy con đã có thứ tự, khi đó ta sẽ dễ dàng trộn n dãy con đó thành 1 dãy hoàn chỉnh có thứ tự tăng dần.

Em nghĩ và cũng đã thử việc chia nhỏ mảng và sắp xếp mảng nhỏ đó trên từng thread được rồi, nhưng đến đoạn hợp nhất lại thì em vẫn có chút thắc mắc, nếu mà hợp mất chuỗi đó lại thì mình vẫn phải sắp xếp lại từ đầu vì chuỗi khi hợp nhất chưa được sắp xếp theo thứ tự, mọi người có thể giải thích hoặc suggest cách làm từ đầu giúp em được không

tạo ra một mảng kết quả (init rỗng)
lần lượt compare n phần tử đầu tiên của mảng, pop cái nhỏ nhất push vào mảng kết quả
làm thế cho tới khi tất cả mảng con rỗng

1 Like

Phần hợp nhất thì bạn nên tìm hiểu thuật toán Sắp xếp trộn (Merge sort).
Chính xác là đề yêu cầu bạn triển khai thuật toán sắp xếp trộn trên đa luồng.

2 Likes

Cậu đã bao giờ nghe tới sleep sort chưa? Đó là giải thuật sort sử dụng multithread native đấy :smile: (Chỉ cần đảm bảo các số sắp xếp là số nguyên dương, và số thread luôn bằng số phần tử cậu muốn sắp xếp)

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