气泡排序数字

Bubble Sorting numbers

本文关键字:数字 排序 气泡      更新时间:2023-10-16

我正在尝试创建一个函数,该函数对数字进行气泡排序并不断出现分段错误。有什么建议吗?

void bubblesort(struct Record *ptr, int records, int (*fcomp)(const void *, const void *))
{
    long c, d, i;    
    struct Record *sa, *sb, sc;
    for (c = 0 ; c < ( records - 1 ); c++)
    {
        for (d = 0 ; d < records - c - 1; d++)
        {
            for(i = 0; i < records - 1; i++)
            {
                if (fcomp(ptr+i, ptr+i+1) <= 0)
                {
                    /* Swapping */
                    sc  = sa[d];
                    sa[d]   = sb[d+1];
                    sb[d+1] = sc;
                }
            }
        }
    }
}

访问sa时未定义的行为,sb

sc  = sa[d];
sa[d]   = sb[d+1];
sb[d+1] = sc;

都是非法的,因为它们只是悬空的指针。

struct Record *sa, *sb

没有为sasb分配任何内存,即使您这样做了,我也看不出它有什么相关性。无论如何,它们都会包含虚假值。