No.2ベストアンサー
- 回答日時:
標準関数のqsortを使用するのですよね?
qsortには配列を渡してあげなきゃいけないので
ノードで持っているのを配列に作り直してからqsortをかけて
最後にノードの再構築をしなくてはならないと思います。
struct person{
struct person* before;
struct person* next;
int age
};
/* 比較関数 */
int compare(const void *e1, const void *e2)
{
struct person* p1 = *((person**)e1);
struct person* p2 = *((person**)e2);
return p1->age - p2->age;
}
struct person* sort(struct person* top)
{
int i,count;
struct person *new_top;
struct person *p;
struct person *prev;
struct person** array;
/* 要素数をカウント */
for(count=0,p=top;p;p=p->next) count++;
/* 配列を作成 */
array = (struct person**)malloc(count*sizeof(struct person*));
for(i=0,p=top;p;p=p->next) array[i++]=p;
/* qsort */
qsort(array,count,sizeof(struct person*),compare);
/* nodeを作り直す */
prev = new_top = array[0];
new_top->before = null;
new_top->next = null;
for(i=1;i<count;i++){
prev->next = p = array[1];
p->before = prev;
p->next = null;
prev = p;
}
//配列の開放
free(array);
return new_top;
}
基本的に考え方はこうなります。
実際にコンパイルして確かめたわけじゃないので、エラー等おきるかもしれませんが(^^;
この回答への補足
試してみたのですが、エラーがおきてしまいました。error C2018:文字'0x81'は認識できません。と error C2018:文字'0x40'は認識できません。というようなエラーが出てしまったのですが、これはどういったことなんですか?教えていただけますか?よろしくお願いします。
補足日時:2002/01/25 13:14No.3
- 回答日時:
>試してみたのですが、エラーがおきてしまいました。
カットアンドペーストしたのなら空白を全角スペースで入れてるので
全角スペースをタブなり半角スペースに変えてみて下さい。
No.1
- 回答日時:
標準関数のqsort()は配列に収められたデータをソートするものですから、
おっしゃるような構造のデータには適用できないと思います。
アルゴリズム自体はそれほど難しいものではなく、再帰的アルゴリズムの
練習によく使われたりするものですから、自作されてはいかがでしょう。
検索サイトでクイックソートを検索すると、いくつも紹介しているサイトが
見つかります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel 効率的な名簿と得点の管理の仕方 8 2022/08/07 08:15
- Excel(エクセル) Excelの50音順ソートを全ての行列に適用するには? 4 2022/12/05 11:28
- Visual Basic(VBA) Excel VBAで並べ替えをしたい 3 2023/02/25 09:31
- JavaScript jsonテキストデータの並び替えができるサービスを教えてください 2 2022/08/05 20:16
- その他(プログラミング・Web制作) sortの優先キーについて(スプレッドシート) 1 2023/01/17 17:59
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
- Excel(エクセル) エクセルのソート方法について 1 2023/01/13 00:01
- Excel(エクセル) 重複しているか否かをソートせずに判断する方法ありますか? 2 2022/07/06 21:16
- Excel(エクセル) エクセルVBA オートフィルタでの絞り込みと並び替えについて 1 2023/07/08 13:08
- UNIX・Linux Linuxについて質問です。 シェルスクリプト名をdiff.shとして、以下のように2つのテキストフ 1 2023/02/03 20:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
DataGridViewの複数列を連動し...
-
VB.NETでファイル名順にファイ...
-
Double型ソート方法
-
(VBA) Dir 関数で取得するファ...
-
10個の整数を入力して小さい順...
-
Excelですべての組合せ(重複組...
-
n個の要素で出来る順列組み合...
-
excel VBA の条件をつけての列...
-
配列の中身を入れ替える方法を...
-
リスト構造のソートで悩んでま...
-
配列の問題
-
【C言語】ファイルでのソート方...
-
DataGridViewソート時に先頭行...
-
qsort/クイックソートについて
-
C言語・要素除去
-
数字文字列のソート方法
-
C++ 入力した3つのint型の整数...
-
In Design
-
ファイル名「1.jpg ~10.jpg~...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
VB.NETでファイル名順にファイ...
-
C# DataGridView のヘッダーセ...
-
ファイル名「1.jpg ~10.jpg~...
-
C# DataTableの行をソートしてD...
-
あるディレクトリ内のファイル...
-
excel VBA の条件をつけての列...
-
excel VBA リストビューの行...
-
DataGridViewの複数列を連動し...
-
文字列をソートする方法
-
Excelですべての組合せ(重複組...
-
列のどこをクリックしてもソー...
-
n番目に大きい数を求めるアル...
-
Excel VBAで並べ替えをしたい
-
DataGridViewの昇順降順。
-
vbでDataTableの抽出コピー
-
数字文字列のソート方法
-
VB6でデータを昇順に並べ替える
-
VBScriptで重複レコードを削除...
-
ListViewのソートについて
おすすめ情報