c++通过对象指针对对象数组进行排序

时间:2021-12-22 19:37:56
现在我想通过“按照学生的学号”对录入的学生信息进行“从小到大的”排序:
仍然用指针
比如录入的是
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)直接对数组排序。

#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;
}

#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;

#1


敢问,num为是有成员,为啥你的对象指针能直接指向num???

#2


1) 另外建一个指针数组,对指针数组排序,只关心顺序,不重排数组。
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;
}

#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;