是否可以通过将 char 结构的单个字段与冒泡排序进行比较来对文件中的记录进行排序?如果是这样,如何?请告诉我算法。
编码:
int main()
{
dataBase* db = new dataBase[N]; //создание динамического массива db
ReadBase(db);
for (int i=0; i<N; i++)
{
cout << db[i].name << "\t" << db[i].sumContribution << "\t"
<< db[i].date << "\t" << db[i].advocate << endl ;
}
cout
<< "_______________________________________________________________________________"
<< "\n" << endl ;
int temp;
for (int i=0; i<N-1; i++)
{
for (int j=0; j<N-1; j++)
if (db[j].name > db[j+1].name)
{
temp = db[j];
db[j].name = db[j+1].name;
db[j+1].name = temp;
}
}
for (int i=0; i<N; i++)
{
cout << db[i].name << "\t" << db[i].sumContribution << "\t"
<< db[i].date << "\t" << db[i].advocate << endl ;
}
delete[] db;
getch();
return 0;
}
是的,你当然可以。但是有几个问题。
你没有描述你的类型
dataBase
。好吧,我们希望其中的字段name
是 typestring
,否则比较if (db[j].name > db[j+1].name)
将无法正常进行。和主要的“但是”——你需要完全交换数组的元素,而不仅仅是一个字段,因为你有:
不过一般写到这里,不好意思,废话——
temp
它有类型int
——你确定name
有类型int
吗?顾名思义,没有。但不管怎么说,你并不是在给temp
变量赋值字段,而是db[j]
……总的来说,在这里搞清楚,交换元素。然后你会得到这样的结果——你决定让学生按身高排列……但与此同时,他们让你把记录簿放在你站立的地板上。排列整齐。现在每个人都拿着他脚下的记录簿......
好吧,或者在建造时,他们只是交换了成绩单——无论谁更高——成绩单都交给了系统的负责人:)
让你的学生到处走,带上记录本:)
其余代码没有检查正确性,粗略看去似乎或多或少是正常的。