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));
	}
}
Trần Hoàn viết 19:28 ngày 01/10/2018

if (a.at(min) > ... chứ không phải if (min > a.at... nhé

rogp10 viết 19:35 ngày 01/10/2018

Đặt thêm cái minIdx nữa cho đỡ nhầm

Hoàng Vương viết 19:29 ngày 01/10/2018

Thê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.

rogp10 viết 19:25 ngày 01/10/2018

Vậy là đúng ý đồ rồi mà swap đó phải nằm ngoài vòng lặp trong.

Lê Minh Cường viết 19:34 ngày 01/10/2018

Em phát hiện code e sai từ thuật toán a.at(min) = a.at(j) mới đúng

rogp10 viết 19:25 ngày 01/10/2018

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).

Bài liên quan
0