用通用大小对结构数组进行排序

哈格巴特·席琳(Hagbart Celine)

我是C语言的新手,我想我的代码还远远没有达到最佳实践的水平。

我的C程序中有一个Array结构。数组的大小为255(已分配),但并未全部使用。

示例中的Array充满了以下信息:

2;a;121212;121212;0
9;c;121212;121212;1
6;d;121212;121212;1
4;e;121212;121212;1
1;v;121212;121212;1
8;x;121212;121212;1

其余的都填充为空值。(我猜)

现在我的问题不在于实际排序。从我开始排序的时候,我就得出了我的数组为空索引并出错的地步。

书的排列:

struct book{
    int ID;
    char name[MAX_STR_LEN];
    char dateIn[DATE_LEN];
    char dateOut[DATE_LEN];
    int isIn;
};


/* array of my books */
struct book books[MAX_BOOKS];

排序功能:

void sort()
{
    /* first find out how many indexes there are */
    int h;
    for (h = 0; h< MAX_BOOKS; h++)
    {
        if (books[h].ID == 0)
        {
            break;
        }
    }

    int j =  0;

    int swaped = 1;
    struct book temp;
    while (swaped == 1)       //bubble sort on the book name
    {
        for(j=0;j< h ;j++)
        {
            swaped = 0;
            if(strcmp(books[j].name,books[j + 1].name)>0)
            {

                //copy to temp val
                temp.ID = books[j].ID;
                strcpy(temp.name,books[j].name);
                strcpy(temp.dateIn,books[j].dateIn);
                strcpy(temp.dateOut,books[j].dateOut);
                temp.isIn = books[j].isIn;


                //copy next val
                books[j].ID = books[j + 1].ID;
                strcpy(books[j].name,books[j + 1].name);
                strcpy(books[j].dateIn,books[j + 1].dateIn);
                strcpy(books[j].dateOut,books[j + 1].dateOut);
                books[j].isIn = books[j + 1].isIn;


                //copy back temp val
                books[j + 1].ID = temp.ID;
                strcpy(books[j+ 1].name,temp.name);
                strcpy(books[j + 1].dateIn,temp.dateIn);
                strcpy(books[j + 1].dateOut,temp.dateOut);
                books[j + 1].isIn = temp.isIn;


                swaped = 1;

            }
        }
    }

}

所以我的问题是,是否可以仅对ID不为0的值进行排序?

如果您需要更多信息,我将尽力提供。

提前致谢!

用户名
for(j=0;j< h ;j++)
{
    if(strcmp(books[j].name,books[j + 1].name)>0)
    {

在这里,您j0到都h-1包含在内。因此,您尝试将j == h-1最后一个元素books[j]与下一个元素books[j+1]不存在)进行比较。您可能只想检查h-2/h-1,即for(j=0; j<h-1; j++)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用C对数据结构数组进行排序

来自分类Dev

排序通用数据结构数组

来自分类Dev

按列表大小对结构列表进行排序

来自分类Dev

如何对通用(void *)数组进行排序?

来自分类Dev

在C ++中对结构数组进行排序

来自分类Dev

在CUDA中对结构数组进行排序

来自分类Dev

使用qsort对结构指针数组进行排序

来自分类Dev

如何使用qsort对结构数组进行排序

来自分类Dev

在Matlab中对数组的结构进行排序

来自分类Dev

使用qsort对结构指针数组进行排序

来自分类Dev

在C中对结构数组进行排序

来自分类Dev

对结构类型数组进行泛型排序

来自分类Dev

用相应的数组对数组进行排序

来自分类Dev

在递归通用数据结构中对对象进行排序

来自分类Dev

在递归通用数据结构中对对象进行排序

来自分类Dev

通用结构的大小

来自分类Dev

通用结构的大小

来自分类Dev

使用通用键对数组内的数组进行排序

来自分类Dev

按结构的非成员对结构数组进行排序

来自分类Dev

使用合并排序对结构数组进行排序

来自分类Dev

用指针而不是数组进行结构hack

来自分类Dev

用指针而不是数组进行结构hack

来自分类Dev

用结构指针数组进行搜索

来自分类Dev

用父母的孩子对PHP数组进行排序

来自分类Dev

用最少的移动对数组进行排序

来自分类Dev

用条件对数组进行排序

来自分类Dev

用JavaScript对数组进行排序

来自分类Dev

用C对数组进行冒泡排序

来自分类Dev

C-与直接对结构进行排序相比,对结构的指针数组进行排序的速度慢(qsort)