Cần giải thích cách hoạt động của vòng for trong đoạn code sắp xếp

#include <iostream>

using namespace std;

int main()
{
	int *head, *p, *q, n, tam;
	cout << "amount "; cin >> n;
	head=new int[n];
	for (p=head; p<head+n; p++){
		cin >> *p;
	}
	for (p=head; p<head+n-1; p++){
		for (q=p+1; q<head+n; q++){
			if(*q<*p){
				tam=*p;
				*p=*q;
				*q=tam;
			}
		}
	}
	for (p=head; p<head+n; p++){
		cout << *p << endl;
	}
}

đoạn code trên sắp sếp không dùng mảng em thắc mắc cái dòng

head=new int[n];
for (p=head; p<head+n; p++)

không biết nó chạy ntn xin các anh (chị) giải thích giúp em.

bác viết như thế này em cũng có chút bối rối à, head=new int[n]; cái này là khai báo mảng mà bác :smiley: new dùng cấp phát động mà chưa thấy delete ở đâu làm em cũng bối rối mà cũng không hiểu tại sao đang trong vòng for có cả ; rồi cin :bối rối:

chắc do không bỏ vào markdown code nên markdown nó làm code lộn xộn hết rồi :grin:

Mình bỏ vào markdow rồi đó.
Mọi người có thể xem :smiley:

1 Like

cái này nó cũng tương tự mảng thôi… một cách viết khác.
nó cũng duyệt qua địa chỉ của các phần tử rồi so sánh giá trị, rồi đổi chỗ các giá trị.

bạn có thể hiểu head + ihead[i], là địa chỉ phần tử thứ i của mảng head (bắt đầu từ head[0])

còn cái head = new int[n] là cấp phát 1 dãy n ô nhớ cho head, head trỏ vào đầu dãy.

2 Likes

bỏ vào markdow để code không bị là thế nào thế. bạn hướng dẫn mình với

đây bạn ơi

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