Bài toán sắp xếp trong mảng một chiều

Chào mọi người, hiện em đang được giao bài tập này nhưng không hiểu cách làm như thế nào. Các anh chị có thể gợi ý hướng giải, nếu được có thể cho em xin code bài này viết bằng C++ được không ạ ? Em xin cảm ơn.

Sắp xếp các giá trị dương trong mảng một chiều các số thực tăng dần, các giá trị âm giảm dần nhưng không làm mất vị trí tương đối của các số với nhau.

Ví dụ:

Input:

10

1 -1 9 3 13 3 12 -21 -12 0

Output:

1 -1 3 3 9 12 13 -12 -21 0

Bạn biết cách sắp xếp 1 mảng tăng dần hoặc giảm dần (đồng loạt) rồi chứ?
Theo như ví dụ mẫu thì bạn nên chia nhóm (số âm, số dương) để sắp xếp cho từng nhóm.

1 -1 9 3 13 3 12 -21 -12 0

Sẽ được các nhóm:

1
-1
9 3 13 3 12
-21 -12
0

Nhưng xem ra vẫn chưa ổn. :smiling_imp:

2 Likes

sắp xếp 1 mảng số dương, 1 mảng số âm, thêm 1 mảng là cờ thể hiện vị trí đó là số âm/ dương ví dụ

flag = [1 0 1 1 1 1 1 0 0 2]
k biết cách khác k :v

1 Like

cách dễ nhất là tách mảng a hiện tại thành 2 mảng âm và dương, rồi sắp xếp 2 mảng này, rồi copy 2 mảng âm dương vào mảng cũ lại: khi copy mảng âm, chỉ copy khi a[i] là số âm, khi copy mảng dương, chỉ copy khi a[i] là số dương.

3 Likes

Đấy! Ổn đấy! :+1::+1::+1:

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