30/09/2018, 17:03
Vòng lặp sắp xếp
Bạn nào giải thích giúp mình chỗ vòng lặp mảng tăng và giảm với
1/ Tại sao lại cho i chạy từ 0 < n-1?
2/ Cho j = i+1 vậy có nghĩa là lúc mới vào thì nó chạy từ phần tử thứ 2 phải không?
http://codepad.org/Mc0jb6j9
Bài liên quan
2 cái tăng và giảm bản chất là tương tự nhau, chỉ khác nhau chỗ điều kiện để đổi chỗ 2 phần tử.
Nên chỉ xét trường hợp sắp xếp mảng tăng nhé.
Mảng tăng thì các phần tử phía sau sẽ lớn hơn hoặc bằng phần tử phía trước.
Dùng 2 vòng lặp để sắp xếp, vòng đầu tiên cho i chạy lần lượt từ 0 đến n-2 , vòng bên trong thì cho j chạy hết các phần tử phía sau i, xét xem phần tử nào nhỏ hơn phần tử thứ i thì đổi chỗ cho i, vậy, sau khi vòng bên trong chạy hết 1 lượt thì ta có phần tử nhỏ nhất tính từ i -> hết mảng đã được đưa vào vị trí i. cứ như vậy i lại tăng, và lại có 1 vong lặp chạy sau i -> hết mảng để lấy phần tử nhỏ nhất trong cái đám còn lại cho vào vị trí i… cứ như vậy đến i=n-2 thì phần tử lớn nhất bị đẩy vào vị trí n-1, thế là được mảng như yêu cầu.
Với mảng giảm thì tương tự.
Thanks cậu mình hiểu cái vòng lặp của nó rồi, nhưng ý chính của mình là muốn hỏi 2 câu này :3
1/ Tại sao lại cho i chạy từ 0 < n-1?
2/ Cho j = i+1 vậy có nghĩa là lúc mới vào thì nó chạy từ phần tử thứ 2 phải không?
i chạy đến n-2 (< n-1) vì
j=i+1;
nếu i chạy đến n-1 (< n) thì khi i = n-1;
j=i+1 = (n-1+1) = n -> tràn mảng
Nhưng khi mình cho i nó bằng n-1 thì nó vẫn ra kết quả đúng mà cậu
Mọi người giúp mình hiểu câu 1 và 2 với :’(
bạn chỉnh lại me=10;
nhập n=10 xem nó có tràn ko
với đọc lại thuật sắp xếp bubble sort luôn nha
Bạn thích cho i chạy từ 0 đến n-1 cũng được chả sao. Sẽ không bị tràn mảng vì ở vòng lặp thứ 2 đã có điều kiện j < n nên vòng cuối cùng sẽ không làm gì cả. Sở dĩ cho i < n - 1 vì nó tiết kiệm được 1 lần chạy.
Đúng mà không đúng. Lúc mới vào nó sẽ chạy từ phần tử i + 1, tùy thuộc vào giá trị của i.
èo ;_;
lại nhìn ẩu.
sr thớt nh nhé
Thanks mọi người mình hiểu rồi :3