30/09/2018, 21:10

Giúp mình về con trỏ trong C++

Mình nhập vào mảng 1 chiều và sắp xếp các phần tử của mảng theo thứ tự tăng dần, sử dụng con trỏ, nhưng lúc thì nó sắp xếp đúng, lúc thì sai, code của mình đây:

#include <iostream>

using namespace std;

void inputMatrix(float a[], int n)
{
	for(int i=0; i<n; i++)
	{
		cout << "Nhap a["<<i<<"]: ";
		cin >> a[i];
	}
}
void outputMatrix(float a[], int n)
{
	for(int i=0; i<n; i++)
	{
		cout << a[i] <<"	";
	}
}

void sapXep(float a[], int n)
{
	float* ptr=&a[0]; float temp;
	for(int i=1; i<n; i++)
	{
		if (*ptr>a[i])
		{
			temp=*ptr;
			*ptr=a[i];
			a[i]=temp;
		}
		ptr=ptr+1;
	}
	for(int i=0; i<n; i++)
	{
		cout <<a[i]<<"	";
	}
}

void main()
{
	float A[100];
	int phantu;
	cout<<"Nhap so phan tu (<100): ";
	cin >> phantu;
	inputMatrix(A,phantu);
	cout<<"Mang ban nhap:"<<endl;
	outputMatrix(A,phantu);
	cout<<"Mang sau khi sap xep:"<<endl;
	sapXep(A, phantu);
	system("pause");
}
Gió viết 23:25 ngày 30/09/2018

Bạn có thể diễn giải hoặc chứng minh thuật toán sắp xếp của mình không? Có thể nói nôm na câu lệnh if trong săpXep tương đương if(a[i-1]>a[i]) swap(a[i],a[i-1]) như vậy nó chỉ đưa số lớn nhất về cuối mạng chứ chưa sắp xếp dc

Bùi Trung Thông viết 23:22 ngày 30/09/2018

hình như thuật toán swap của bạn có vấn đề, sao không tập sử dụng quick sort luôn đi

Chế Vũ Gia Hy viết 23:27 ngày 30/09/2018

code của bạn chỉ sort 1 lần do chỉ có một vòng for

Phạm Minh Anh Hữu viết 23:11 ngày 30/09/2018

Cảm ơn mấy bạn, thế trong trường hợp này mình dùng con trỏ có được không ạ, mình mới học nên mọi thứ còn bỡ ngỡ:confounded:

Chế Vũ Gia Hy viết 23:13 ngày 30/09/2018

bạn dùng con trỏ trong trường hợp này giống như sử dụng a[0] thôi, và ptr + 1 là a[1] nên đương nhiên là được. Vấn đề ở đây là thuật toán sort của bạn có vấn đề.

Phạm Minh Anh Hữu viết 23:13 ngày 30/09/2018

như này hả bạn


#include <iostream>

using namespace std;

void inputMatrix(float a[], int n)
{
	for(int i=0; i<n; i++)
	{
		cout << "Nhap a["<<i<<"]: ";
		cin >> a[i];
	}
}
void outputMatrix(float a[], int n)
{
	for(int i=0; i<n; i++)
	{
		cout << a[i] <<"\t";
	}
}

void sapXepTang(float a[], int n)
{
	float temp=0;
	float *ptr=a;
	for(int i=0; i<=n; i++)
	{
		for(int j=i+1;j<n;j++)
		{
			if (*(ptr+i)>*(ptr+j))
			{
				temp=*(ptr+j);
				*(ptr+j)=a[i];	
				*(ptr+i)=temp;
			}
		}
	}
	for(int i=0; i<n; i++)
	{
		cout <<a[i]<<"\t";
	}
}

void main()
{
	float A[100];
	int phantu;
	cout<<"Nhap so phan tu (<100): ";
	cin >> phantu;
	inputMatrix(A,phantu);
	cout<<"Day ban nhap:"<<endl;
	outputMatrix(A,phantu);
	cout <<endl;
	cout<<"Day sau khi sap xep tang dan:"<<endl;
	cout <<endl;
	sapXepTang(A, phantu);
	system("pause");
}
Chế Vũ Gia Hy viết 23:15 ngày 30/09/2018

Nhìn sơ cũng thấy đúng rồi đấy, bạn test input là biết liền rồi mà

Phạm Minh Anh Hữu viết 23:25 ngày 30/09/2018

hihi, cảm ơn bạn

Bài liên quan
0