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:\n");
 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;
 }

đâ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ảng
Vì 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.

1 Like

swap hoán đổi đó :smiley:

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

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?