C-为什么结构数组的冒泡排序会跳过数组中的第一个元素?

标签 c arrays sorting struct

有谁知道为什么这种排序不对结构体数组中的第一个元素进行排序?下面是结构体、排序和一些示例输入输出的代码。我已经排除了填充数组的代码,因为我在排序之前通过打印数组知道它已正确填充。

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/

相关文章:

从现有的 x 宏创建相关的 x 宏

限制 gcc 内联 x86_64 程序集中的 r10 寄存器

c# - 如何对字符串进行排序,以便首先搜索以搜索词开头的字符串?

python - 使用 lambda 对字符串列表进行排序并忽略前缀

java - 对 1,000,000 个对象进行排序(不按键)- Java

c - 确定正则表达式是否只匹配固定长度的字符串

c - 为什么 "implicit declaration of function"只是一个警告?

c - 我试图将随机整数分配给结构成员,但它无法正常工作

javascript - 动态改变变量

JavaScript - 检查一个数组是否具有与第二个数组相同的索引