01/10/2018, 17:21
Truyền vector vào hàm
Anh chị cho em hỏi, em muốn đưa vector a gồm 1 mảng các giá trị, và sắp xếp lại thì phải làm sao.
Đây là code của em, nhưng sau khi xuất trật tự nó vẫn giữ nguyên, anh chị giúp em với. Em cảm ơn.
void swap(int &a,int &b)
{
int z = a;
a = b;
b = z;
}
void selectionSort(vector <int> &a)
{
for(int i = 0 ; i < a.size()-1; i++)
{
int min = i;
for(int j = i + 1 ; j < a.size(); j++)
if(min > a.at(j)) min = a.at(j);
swap(a.at(i),a.at(min));
}
}
Bài liên quan
if (a.at(min) > ...
chứ không phảiif (min > a.at...
nhéĐặt thêm cái
minIdx
nữa cho đỡ nhầmThêm cái {} cho lệnh if nữa. Nếu không hàm swap sẽ được thực qua mỗi vòng lặp.
Vậy là đúng ý đồ rồi mà swap đó phải nằm ngoài vòng lặp trong.
Em phát hiện code e sai từ thuật toán a.at(min) = a.at(j) mới đúng
Sửa vậy còn sai hơn
Với ý đồ này thì bạn nên viết rõ tên biến là
minIdx
chứ không lại nhầm.min
vẫn có thể giữ lại để so sánh, nhưng swap thì phải có chỉ số (idx
).