有谁知道为什么这种排序不对结构体数组中的第一个元素进行排序?下面是结构体、排序和一些示例输入输出的代码。我已经排除了填充数组的代码,因为我在排序之前通过打印数组知道它已正确填充。
struct Record
{
char *firstName;
char *lastName;
char *GPA;
unsigned int ID;
};
void newList(struct Record * Records, int amount, char* name)
{
int i;
int j;
struct Record tempR;
FILE *fp;
unsigned int temp;
//Order Array
for(i=0;i<amount;i++)
{
for(j=0;j<amount-1;j++)
{
if(strcmp(Records[j].firstName,Records[j+1].firstName)<0)
{
tempR=Records[j];
Records[j]=Records[j+1];
Records[j+1]=tempR;
}
}
}
//Make New Fle with Ordered Array
fp=fopen(name, "w+");
for(i=0;i<amount;i++)
{
fprintf(fp,"%s, %s, %s, %d, Records[i].firstName,Records[i].lastName,
Records[i].GPA,Records[i].ID);
}
}
此代码的示例输入和输出如下输入:
Yblwtjbvtz,Eoztbzoqnz,2.6,1123268861
Blmhwgzjdd,Ojwfnlislc,3.1,1712113924
Gkmkbnotic,Mhzcakkugv,3.3,1966045151
Zsrwqdwkfo,Nciqixcamr,2.1,212426241
Vrekafrafk,Ixylzenhlc,2.2,297694159
Kzkaxpoeqg,Syawkuqbew,3.4,104209687
Ekdcfsifrw,Apvrwfshqm,1.4,799470314
Iybmcotvpf,Eqvcorjntu,0.6,1748600414
Jsfwiydnyt,Rhyaabwfdr,2.2,104800253
Mfqrukoytp,Urjsjcloau,3.8,1240702350"
输出:
Yblwtjbvtz, Eoztbzoqnz, 2.6, 1123268861
Zsrwqdwkfo, Nciqixcamr, 2.1, 212426241
Vrekafrafk, Ixylzenhlc, 2.2, 297694159
Mfqrukoytp, Urjsjcloau, 3.8, 1240702350
Kzkaxpoeqg, Syawkuqbew, 3.4, 104209687
Jsfwiydnyt, Rhyaabwfdr, 2.2, 104800253
Iybmcotvpf, Eqvcorjntu, 0.6, 1748600414
Gkmkbnotic, Mhzcakkugv, 3.3, 1966045151
Ekdcfsifrw, Apvrwfshqm, 1.4, 799470314
Blmhwgzjdd, Ojwfnlislc, 3.1, 1712113924
最佳答案
这是一个用 C 语言编写的冒泡排序算法示例。
for (size_t c = 0 ; c < ( n - 1 ); c++)
{
for (size_t d = 0 ; d < n - c - 1; d++)
{
if (array[d] > array[d+1]) /* For decreasing order use < */
{
swap = array[d];
array[d] = array[d+1];
array[d+1] = swap;
}
}
}
所以发布的代码应该实现相同的算法,只是使用不同的变量/数组名称
关于C-为什么结构数组的冒泡排序会跳过数组中的第一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35952344/