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]);
}
}
}
}
}
Bài liên quan
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
cụ thể hơn đi bạn chưa hiểu lắm’
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
ý 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ả
ừ, ban đầu i = n / 2 =6/2 =3
sau i = i/2 = 3/2 =1
cứ thế chia dần xuống
kk. ra vậy cảm ơn bạn nka