4
我有一個工作的插入排序算法,用於排序存儲在數組中的整數。在另一個程序中,我創建了一個包含單詞和計數的結構體。我需要使用相同的插入排序按字母順序排列存儲在數組中的結構。我知道如何比較它們,但我找不到交換它們的方法。想法?如何實現用於插入排序算法的結構交換C
typedef struct { char * word; int count; } wordType;
我有一個工作的插入排序算法,用於排序存儲在數組中的整數。在另一個程序中,我創建了一個包含單詞和計數的結構體。我需要使用相同的插入排序按字母順序排列存儲在數組中的結構。我知道如何比較它們,但我找不到交換它們的方法。想法?如何實現用於插入排序算法的結構交換C
typedef struct { char * word; int count; } wordType;
您可以把struct
S也是一樣的方式你換了整數:
wordType tmp;
wordType a = {.word="hello", .count=5};
wordType b = {.word="world", .count=11};
tmp = a;
a = b;
b = tmp;
如何交換它們?只需使用一個臨時結構:
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.]
只要小心這個字符串。 – Anthony 2013-05-01 02:52:06
字符串很好,它只是一個指針,並將按原樣交換。既然你正在總結這兩個項目,它不管它是淺的還是深的副本都沒有區別。 – paxdiablo 2013-05-01 02:52:43
是的,它通常很好。只要小心任何其他提到的字符串躺在。類似於:'char * s1 = w1.word; swapEm(&w1,&w2); strcpy(s1,「You're w1」);'Oops,寫錯了字符串。不可否認,這種事情不太可能發生在插入排序中,而且這樣做是否實際上是錯誤取決於交換背後的意圖,只是要小心。 – Anthony 2013-05-01 03:04:59