0 👍
246 lượt xem
bởi (🏅0)
List<Employee*> list

void Swap(Employee* a, Employee* b) {
    Employee* temp = a;
    a = b;
    b = temp;
}

void SapXepTangDan() {
    for (int i = 0; i < list.size(); i++)
    {
        for (int j = 0; j < list.size(); j++)
        {
            if(list.get(i)->TinhLuong() > list.get(j)->TinhLuong())
            {
                Swap(list.get(i), list.get(j));
            }
        }
    }
    InDanhSach();
}

Không báo lỗi nhưng không swap được. Đã test. Mọi người cho xin giải pháp với. Thanks!

1 Câu trả lời

+1 👍
bởi (🏅167)
- Thứ nhất là hàm Swap của em đang sai. Trong hàm này chỉ có a và b swap giá trị cho nhau, nhưng pointer thực sự chứa trong list thì không swap. Để giá trị pointer trong list có thể swap được thì em phải dùng kiểu "pointer of pointer" hoặc "reference to pointer". Trong case này a suggest dùng "reference to pointer", hàm Swap viết lại như sau
void Swap(Employee*& a, Employee*& b) {
    Employee* temp = a;
    a = b;
    b = temp;
}
- Thứ 2 là thuật toán chưa tối ưu, biến j chỉ cần chạy từ i + 1 đến list.size() - 1
void SapXepTangDan() {
    for (int i = 0; i < list.size(); i++)
    {
        for (int j = i + 1; j < list.size(); j++)
        {
            if(list.get(i)->TinhLuong() > list.get(j)->TinhLuong())
            {
                Swap(list.get(i), list.get(j));
            }
        }
    }
    InDanhSach();
}
Em thử lại xem sao nhé.
bởi (🏅0)
Dạ em cám ơn ạ.
Coding Guru là nơi dành cho cộng đồng lập trình viên Việt Nam hỗ trợ nhau về tất cả các vấn đề liên quan đến công nghệ.

Chúng ta hãy cùng nhau xây dựng một cộng đồng công nghệ Việt Nam mạnh mẽ, thúc đẩy và giúp đỡ nhau cùng phát triển, thăng tiến trong sự nghiệp.

***
Nơi đam mê hội tụ
***

Một số câu hỏi gần đây có thể tương tự hoặc liên quan ↓

0 👍
1 trả lời 321 lượt xem
0 👍
1 trả lời 9 lượt xem
hỏi bởi LuanThanh 26/9/2021
0 👍
1 trả lời 87 lượt xem
hỏi bởi ẩn danh 14/9/2021
0 👍
1 trả lời 76 lượt xem
hỏi bởi quockhanh (🏅0) 4/9/2021
...