使用指针交换结构
假设我们有如下结构:
struct EMPLOYEE{ int EmpID; int Sal; } Stu[5];
如果满足以下条件,我们希望交换这些结构:
Stu[i].Sal < Stu[0].Sal
一种方法是通过交换整个结构。 像这样的东西:
TempStu.Sal = Stu[i].Sal; Stu[i].Sal = Stu[0].Sal; Stu[0].Sal = TempStu.Sal; TempStu.EmpID = Stu[i].EmpID; Stu[i].EmpID = Stu[0].EmpID; Stu[0].EmpID = Temp.Stu.EmpID;
这使得它成为一种非常耗时的方法。 其他方法可能是使用指向EMPLOYEE结构的指针数组,然后只对这些指针进行排序。 我无法弄清楚如何做到这一点。
这是我做的一个开始..
EMPLOYEE *St[5]; for(int j=0; j<5; j++) { St[j] = &Stu[j]; } if(Stu[i].Sal < Stu[0].Sal) swap(St[i],St[0]); void swap(EMPLOYEE *A, EMPLOYEE *B) { EMPLOYEE temp = *A; *A = *B; *B = temp; }
这是正确的方法吗?
这是正确的方法吗?
几乎。 在swap()
,您需要使用指针指针(或指向C ++中的指针)。 否则,您对A
和B
所做的更改不会传播回调用方。
你的想法是正确的,但你的function只交换了两个本地指针。
试试这个
if(Stu[i].Sal < Stu[0].Sal) swap(&St[i],&St[0]);//pass the addresses void swap(EMPLOYEE **A, EMPLOYEE **B) { EMPLOYEE *temp = *A; *A = *B; *B = temp; }
试试这个:
void swap(EMPLOYEE* arr[],int i,int j) { EMPLOYEE* temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } if (Stu[i].Sal < Stu[0].Sal) swap(Stu,i,0);