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");
}
Bài liên quan
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
trongsăpXep
tương đươngif(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 dchì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
code của bạn chỉ sort 1 lần do chỉ có một vòng for
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:
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 đề.
như này hả bạn
Nhìn sơ cũng thấy đúng rồi đấy, bạn test input là biết liền rồi mà
hihi, cảm ơn bạn