仍然用指针
比如录入的是
05 aa 98.5
02 bb 54.5
04 cc 78.3
排序完成后变成:
02 bb 54.5
04 cc 78.3
05 aa 98.5
我用指针的算法如下:
student类如下:
class student
{
public:
void sort();
private:
long num;
char *name;
float grade;
int length;//有多少个学生的信息
}
在main()中调用如下:
void main()
{
student *st;
cout<<"输入你要录入的学生信息的个数:"<<endl;
cin>>length;
st=new student[length];
st->sort(st,length);
}
sort函数具体如下:
void sort(student *&pt,int length)//length是学生信息的个数
{
int i,j;
student *temp;
for(i=0;i<length;i++)
{
for(j=i;j<length;j++)
{
if((p+i)->num>(p+j)->num)//通过对学生的学号进行整个信息的排序
{
temp=(p+i);
(p+i)=(p+j);/////这里有报错了
(p+j)=temp;
}
}
}
我要问的是怎么通过对象指针对对象数组进行排序
有何看不懂请直接回帖批
6 个解决方案
#1
敢问,num为是有成员,为啥你的对象指针能直接指向num???
#2
1) 另外建一个指针数组,对指针数组排序,只关心顺序,不重排数组。
2)另外建一个指针数组,对指针数组排序,并且根据指针排序的结果,对数组洗牌。
3)直接对数组排序。
2)另外建一个指针数组,对指针数组排序,并且根据指针排序的结果,对数组洗牌。
3)直接对数组排序。
#3
插入的时候就排序最好,插入时挨着判断,从最后开始判断,比当前小就继续前一,一直到比当前大然后插入当前的后面 =。=
#4
不用stl吗
#5
st=new student[length];
vector<student *> arrStudent;
for(int i=0; i<length; ++i)
arrStudent.push_back(st+i);
sort(arrStudent.begin(), arrStudent.end(), sort_by_no);
bool sort_by_no(student *&a, student *&b)
{
return a->num < b->num;
}
vector<student *> arrStudent;
for(int i=0; i<length; ++i)
arrStudent.push_back(st+i);
sort(arrStudent.begin(), arrStudent.end(), sort_by_no);
bool sort_by_no(student *&a, student *&b)
{
return a->num < b->num;
}
#6
写错了
st=new student[length];
student **pst = new student *[length];
vector<student *> arrStudent;
for(int i=0; i<length; ++i)
{
pst[i] = st + i;
arrStudent.push_back(pst[i]);
}
sort(arrStudent.begin(), arrStudent.end(), sort_by_no);
bool sort_by_no(student *&a, student *&b)
{
return a->num < b->num;
}
st=new student[length];
student **pst = new student *[length];
vector<student *> arrStudent;
for(int i=0; i<length; ++i)
{
pst[i] = st + i;
arrStudent.push_back(pst[i]);
}
sort(arrStudent.begin(), arrStudent.end(), sort_by_no);
bool sort_by_no(student *&a, student *&b)
{
return a->num < b->num;
}
#1
敢问,num为是有成员,为啥你的对象指针能直接指向num???
#2
1) 另外建一个指针数组,对指针数组排序,只关心顺序,不重排数组。
2)另外建一个指针数组,对指针数组排序,并且根据指针排序的结果,对数组洗牌。
3)直接对数组排序。
2)另外建一个指针数组,对指针数组排序,并且根据指针排序的结果,对数组洗牌。
3)直接对数组排序。
#3
插入的时候就排序最好,插入时挨着判断,从最后开始判断,比当前小就继续前一,一直到比当前大然后插入当前的后面 =。=
#4
不用stl吗
#5
st=new student[length];
vector<student *> arrStudent;
for(int i=0; i<length; ++i)
arrStudent.push_back(st+i);
sort(arrStudent.begin(), arrStudent.end(), sort_by_no);
bool sort_by_no(student *&a, student *&b)
{
return a->num < b->num;
}
vector<student *> arrStudent;
for(int i=0; i<length; ++i)
arrStudent.push_back(st+i);
sort(arrStudent.begin(), arrStudent.end(), sort_by_no);
bool sort_by_no(student *&a, student *&b)
{
return a->num < b->num;
}
#6
写错了
st=new student[length];
student **pst = new student *[length];
vector<student *> arrStudent;
for(int i=0; i<length; ++i)
{
pst[i] = st + i;
arrStudent.push_back(pst[i]);
}
sort(arrStudent.begin(), arrStudent.end(), sort_by_no);
bool sort_by_no(student *&a, student *&b)
{
return a->num < b->num;
}
st=new student[length];
student **pst = new student *[length];
vector<student *> arrStudent;
for(int i=0; i<length; ++i)
{
pst[i] = st + i;
arrStudent.push_back(pst[i]);
}
sort(arrStudent.begin(), arrStudent.end(), sort_by_no);
bool sort_by_no(student *&a, student *&b)
{
return a->num < b->num;
}