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;
 }
Chế Tiệp Chân Khoa viết 00:49 ngày 01/10/2018

đâ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

Lưu Thành Vương viết 00:53 ngày 01/10/2018
Ñö Ñämë viết 00:43 ngày 01/10/2018

đâ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!!!

Ñö Ñämë viết 00:50 ngày 01/10/2018

cảm ơn luôn nha!!!

Ñö Ñämë viết 00:40 ngày 01/10/2018

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!!!

Hoài Nam viết 00:43 ngày 01/10/2018

i < n -> vòng cuối cùng i = n -1
-> j = i + 1 = n -> break luôn
-> thừa

Lưu Thành Vương viết 00:44 ngày 01/10/2018

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.

T Nguyen viết 00:47 ngày 01/10/2018

swap hoán đổi đó

Ñö Ñämë viết 00:39 ngày 01/10/2018

Sắp xếp trong khoảng 0->n-1Vò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.

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é.

Ñö Ñämë viết 00:42 ngày 01/10/2018

i < n -> vòng cuối cùng i = n -1-> j = i + 1 = n -> break luôn-> thừa

cảm ơn bạn nhiều nhé!!!1

Bài liên quan
0