30/09/2018, 22:37
Thắc mắc vòng lặp trong C
#include<stdio.h>
#include<conio.h>
int a[100];
void main()
{
int i, j, n,k;
printf("nhap so phan tu cua mang: ");
scanf_s("%d", &n);
for (i = 0; i < n; i++)
{
printf("nhap phan tu thu %d: ", i + 1);
scanf_s("%d", &a[i]);
}
for (i = 0; i < n-1;i++)
for (j = i+1; j < n;j++)
if (a[i]>a[j])
{
k = a[i];
a[i] = a[j];
a[j] = k;
}
printf("mang sau khi da sap xep la:
");
for (i = 0; i < n; i++) printf(" %d ", a[i]);
_getch();
}
Anh chị nào giải thích giùm em code này đi ạ:
for (i = 0; i < n-1;i++)
for (j = i+1; j < n;j++)
if (a[i]>a[j])
{
k = a[i];
a[i] = a[j];
a[j] = k;
}
Bài liên quan
đây là thuật toán sắp xếp nổi bọt, bạn google hoặc viết số ra mấy cái thẻ rồi làm theo từng bước trong code để sắp xếp là hiểu ngay á mà
đoạn code trong {} là tráo já trị của a[i] và a[j], phải có 1 biến phụ để lưu lại mới tráo dc
cam on ban nhiều nha!!!
cảm ơn luôn nha!!!
mà mình không hiểu chỗ: for (i = 0; i < n-1;i++)
nếu ngay chỗ i<n-1 có cũng được mà mình thử bỏ -1 thì nó cung vậy code (i<n)
giải thích giùm mình đi!!!
i < n -> vòng cuối cùng i = n -1
-> j = i + 1 = n -> break luôn
-> thừa
Sắp xếp trong khoảng 0->n-1
Vòng for cuối cùng sẽ so sánh
a[n-2]
vớia[n-1] (a[i]?a[j])
=>Vậy là đầy đủ mảngVì j=i+1 => nếu i=n-1 => j=n mà a[n] sai.
Mấy cái này đơn giản nên khuyến khích tự mò mẫm, lấy giấy vẽ ra càng tốt, tiện luyện tư duy luôn.
swap hoán đổi đó
lấy giấy viết đi viết lại cả chục lận luôn đó bạn,chắc tại vừa học trong trường vừa học lập trình nên rối loạn hết luôn. cảm ơn bạn nhé.
cảm ơn bạn nhiều nhé!!!1