2013-09-28 134 views
2

我正在瀏覽單詞列表,如果某單詞符合特定條件,它將被打印到屏幕上。棘手的一點是單詞按字母順序打印到屏幕上的順序。這樣做的最好方法是什麼?我猜想首先對列表進行排序會效率低下,所以我會選擇一個鏈接列表,但很遺憾c doesn't have one :(按字母順序從列表中打印某些單詞

+0

http://www.cplusplus.com/reference/cstdlib/qsort/ –

+0

除非它是一個很長的名單,排序可能是最好的辦法,並採取很少的時間。 – lurker

+0

只需對它們進行排序即可。實際情況是,即使你不打電話給你,但是要完成你的任務,你仍然要對它們進行排序。附: C有一個鏈表......數以百萬計。 – Duck

回答

1

最好的方法是在打印出來之前對單詞進行排序C提供了一個排序函數,稱爲qsort()。它適用於陣列,以及需要傳遞的比較功能。下面是一個使用qsort()排序的int陣列的一個例子。

static int cmp_int (const void *a, const void *b); 

//... 
    int arr[] = { 2, 4, 6, 1, 3, 5 }; 
    qsort(arr, sizeof(arr)/sizeof(*arr), sizeof(*arr), cmp_int); 

訣竅正確地實現cmp_int()是要認識到的類型比較功能接收與&arr[0]類型相同。由於arr是一個數組int,這意味着cmp_int()將收到int *類型。如果第一個參數小於第二個參數,則該函數應該返回負值,如果第一個參數大於第二個參數,則返回正值,否則返回0。

static int cmp_int (const void *a, const void *b) { 
    const int *aa = a; 
    const int *bb = b; 
    return (*aa > *bb) - (*aa < *bb); 
} 
+0

+1不錯的經典緊緻解決方案。 – chux