【问题标题】:C: Sorting a pointer structure array by pointer keyC:通过指针键对指针结构数组进行排序
【发布时间】:2012-02-25 04:46:36
【问题描述】:

我有这个结构:

typedef struct {
   char *str;
   ...
} nameType;

我新建了一个指针实例,初始化了里面的str指针(这些都已经做对了,我可以用printfs来检查一下)。

nameType *names;
names = malloc( 10 * sizeof( nameType ) );
for ( i = 0; i < 10; i++ ) {
    ...
    names[ i ].str = malloc( ... );
    ...
}

然后我想使用冒泡排序对其进行排序,但我无法做到这一点。注意到我设法使用 qsort 做到了,但经过几天的调试、测试、谷歌搜索等,我仍然找不到它。排序代码:

for ( i = 0; i < n - 1; i++ ) {
    for ( j = n - 1; j > i; j-- ) {
        if ( strcmp( names[ i ].str, names[ j ].str ) > 0 ) {
            nameType *tmp;
            tmp = names[ i ];
            names[ i ] = names[ j ];
            names[ j ] = tmp;
        }
    }
}

(上面的代码只是我正在做的排序的一个例子——我已经尝试了这么多变种,我的想法会大吃一惊。)

【问题讨论】:

  • 您问的是冒泡排序还是这段代码的问题?
  • 您遇到了什么麻烦?您使用的执行排序的代码是什么?
  • 对不起,我忘记添加排序代码了。我的排序有问题,其他一切正常,我已经检查过了。
  • 只是一个观察(可能无关紧要),j 不应该从n-1 开始而不是n
  • @another.anon.coward 帖子中的错字,已修复。

标签: c arrays sorting pointers struct


【解决方案1】:

names 被用作nameType 的数组,但是

nameType *tmp;
tmp = names[ i ];

您将names[i] 分配给指向nameType 的指针。设为nameType tmp;

当然,请确保您不要超出为names 分配的空间,正如@another.anon.coward 所说,j 可能应该从n-1 开始。

【讨论】:

  • 谢谢,就是这样。 (“n”而不是“n-1”是第一个帖子的类型)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-15
  • 2015-12-13
  • 2014-07-04
  • 2012-09-26
  • 2016-11-29
相关资源
最近更新 更多