私は電話帳プログラムを作成する必要があります。プログラムはファイルから名前と番号を読み取る必要があります。私はこのデータを含むリンクリストを作成しました。今ではアルファベット順にソートしたいと思っています。私はどうしたらいいですか?リンクリストを使用したCの挿入ソート
0
A
答えて
2
あなたの目的によって異なります。
これを効率的に実行するには、配列にすべての要素のポインタを置き、quicksort(Cではqsort
)のようなアルゴリズムを使用して配列をアルファベット順にソートします。最後に、並べ替えられた配列からリストを再作成します。
一方、これが宿題で、投稿のタイトルが示すように挿入ソートを使用する必要がある場合は、別の問題です。
0
リンクリストを作成した後でソートしますか?
このようなデータをソートする最適な方法は、ツリーを使用してデータをロードするときにソートすることです。ハッシュがおそらく最速であるにもかかわらず、ツリーデータ構造も迅速に検索できます。 strcmpはソートや検索を行う最も簡単な方法ではないことに注意してください。検索タームにインデックスを維持して、インデックスが最初に一致しない文字を指すようにコーディングすることができます。それで、あなたはただ一つのキャラクターを比較する必要があります。しかし、私はそれのためのサンプルコードを与える時間がありません。
typedef struct directory_entry_t
{
char *name;
char *number;
directory_entry_t *before;
directory_entry_t *after;
} directory_entry;
...
bool found;
while(!found)
{
int result = strcmp("name", node->name);
if(0 == result)
{
fprintf(stderr, "Duplicate entry for %s.\n", name);
}
else if(0 < result)
{
if(NULL == node->after)
{
/* Create a new node, populate it, and store a pointer to it at node->after. */
found = true;
}
else
{
node = node->after;
}
else
{
/* Like the above case, but for before. */
}
}
0
挿入ソート遅いですが、あなたが使用したい場合には、(T & C適用)絶食そのうち、sorting algoritms他の多くのがありますがhttp://en.wikipedia.org/wiki/Insertion_sort
を見てO(NlogN)です。 quicksortまたはmerge sortのいずれかをお勧めします。
0
リンクリストは、並べ替えのための想像を絶する最悪のデータ構造です。挿入すると、リスト全体で線形トラバーサルを行う必要があります。正しい質問をしてもよろしいですか?
1
関連する問題
- 1. 二重リンクリストを使用した挿入ソートの複雑さ?
- 2. リンクリストcstring挿入ソート
- 3. リンクリストとポインタを使用した挿入ソート
- 4. 二重リンクリストの挿入ソートの使い方C++?
- 5. Cでソートされたリンクリストにノードを挿入
- 6. ソートされた二重リンクリストに挿入するC++
- 7. C++単リンクリストの挿入?
- 8. C++リンクリストの再帰挿入
- 9. リンクリスト挿入c:間違った値を挿入
- 10. ソートされた二重リンクリストの整数を挿入する
- 11. ブックオブジェクトのリンクリストを使用した挿入の並べ替え
- 12. ソートされた二重リンクリストへの挿入
- 13. Cの挿入ソートのセグメンテーションフォルト
- 14. リンクリストに文字列を挿入してソートする
- 15. リンクリストに挿入
- 16. 二重リンクリストを挿入したプライオリティキュー
- 17. 挿入ソートを使用した集計の比較
- 18. Cのリンクリストのアルファベット順ソート?
- 19. Java(ループなし)で再帰アルゴリズムを使用した挿入ソート
- 20. C:リンクリストの再帰的ソート
- 21. Cでリンクリストをソートする(選択ソート)
- 22. リンクリスト:再帰を使用してノードを挿入
- 23. 関数呼び出しを使用したリンクリストの挿入問題
- 24. ソートされたリンクリストにノードを挿入する時間の複雑さ
- 25. クラスを使用したC++単独リンクリスト
- 26. 二重リンクリストを使用したC++スタック
- 27. クラス(OOP)を使用したC++リンクリスト
- 28. 配列を使ってデータをソートするC++でリンクリストをソート
- 29. C++での降順での挿入ソート
- 30. リンクリストの先頭に挿入
quicksortはピボット選択のためのランダムアクセスが必要であり、リンクリストでは(効率的に)使用できません。 – Christoph
@Christoph最初の要素がピボットであると決める場合はありません。 – marcog
...すでにソートされた(または部分的にソートされた)リストのパフォーマンスを低下させます – Christoph