【发布时间】:2013-04-25 02:11:28
【问题描述】:
我有一个有效的插入排序算法,可以对存储在数组中的整数进行排序。在另一个程序中,我创建了一个带有单词和计数的结构。我需要使用相同的插入排序按字母顺序对存储在数组中的结构进行排序。我知道如何比较它们,但是我找不到交换它们的方法。想法?
typedef struct { char * word; int count; } wordType;
【问题讨论】:
标签: c struct insertion-sort
我有一个有效的插入排序算法,可以对存储在数组中的整数进行排序。在另一个程序中,我创建了一个带有单词和计数的结构。我需要使用相同的插入排序按字母顺序对存储在数组中的结构进行排序。我知道如何比较它们,但是我找不到交换它们的方法。想法?
typedef struct { char * word; int count; } wordType;
【问题讨论】:
标签: c struct insertion-sort
如何交换它们?只需使用临时结构:
void swapEm (wordType *w1, wordType *w2) {
wordType wx;
memcpy (&wx, w1, sizeof(wx));
memcpy (w1, w2, sizeof(wx));
memcpy (w2, &wx, sizeof(wx));
}
请参阅以下完整程序以获取示例:
#include <stdio.h>
#include <string.h>
typedef struct { char * word; int count; } wordType;
void swapEm (wordType *w1, wordType *w2) {
wordType wx;
memcpy (&wx, w1, sizeof(wx));
memcpy (w1, w2, sizeof(wx));
memcpy (w2, &wx, sizeof(wx));
}
void printOne (char *s, wordType *w) {
printf ("%s: %d [%s]\n", s, w->count, w->word);
}
int main(void) {
wordType w1, w2;
w1.word = strdup ("from Pax."); w1.count = 314159;
w2.word = strdup ("Hello"); w2.count = 271828;
printOne ("w1", &w1); printOne ("w2", &w2);
swapEm (&w1, &w2);
puts ("===");
printOne ("w1", &w1); printOne ("w2", &w2);
free (w1.word); free (w2.word);
return 0;
}
输出是:
w1: 314159 [from Pax.]
w2: 271828 [Hello]
===
w1: 271828 [Hello]
w2: 314159 [from Pax.]
【讨论】:
char *s1 = w1.word; swapEm(&w1, &w2); strcpy(s1, "You're w1"); 糟糕,写入了错误的字符串。诚然,这种事情不太可能在插入排序中发生,这样做是否实际上是错误首先取决于交换背后的意图。小心点。
您可以像交换整数一样交换structs:
wordType tmp;
wordType a = {.word="hello", .count=5};
wordType b = {.word="world", .count=11};
tmp = a;
a = b;
b = tmp;
【讨论】: