30/09/2018, 18:22

Không hiểu vòng lặp đầu tiên trong code Shell Sort

m.n cho e hỏi cái vòng lặp đầu tiên trong sắp xếp Shell_Sort chạy ra sao z. tự dưng i=n/2 rồi còn i=i/2 nữa e ko hiểu cái này.

void Shell_Sort(int a[], int n)
{
	int k;
	for (int i = n / 2; i>0; i = i / 2)
	{
		for (int j = i; j < n; j++)
		{
			for (k = j - i; k >= 0; k = k - i)
			{
				if (a[k + i] >= a[k])
					break;
				else
				{
					swap(a[k], a[k + 1]);
				}
			}
		}
	}
}
17XGOD viết 20:22 ngày 30/09/2018

i = n / 2 là lúc ban đầu nó chỉ thực hiện 1 lần duy nhất
i = i / 2 là sau khi thực hiện các câu lệnh thì sẽ thực hiện i = i/2

Long Long viết 20:30 ngày 30/09/2018

cụ thể hơn đi bạn chưa hiểu lắm’

17XGOD viết 20:24 ngày 30/09/2018

vd : for (1;2;3)
{

}

1 là thứ ban đầu, sau khi input 1 vào thì sẽ kiểm tra điều kiện 2 nếu mà thoả điều kiện thì sẽ thực hiện dòng lệnh, sau đó lại thực hiện 3 rồi lại kiểm tra điều kiện cứ thế cho đến khi không thoả điều kiện nữa 1 chỉ thực hiện lúc đầu và chỉ thực hiện 1 lần duy nhất

Long Long viết 20:30 ngày 30/09/2018

ý mình là giả sử n=6 đi. thì I1=3, I2>0,I3=1 mình không hiểu cái này nek bạn. cái này nó chạy lùi hả

17XGOD viết 20:27 ngày 30/09/2018

ừ, ban đầu i = n / 2 =6/2 =3
sau i = i/2 = 3/2 =1
cứ thế chia dần xuống

Long Long viết 20:32 ngày 30/09/2018

kk. ra vậy cảm ơn bạn nka

Bài liên quan
0