大学の課題で線形リストのバブルソートについての課題が出た際に作ったプログラム。
線形リストやらポインタやらがC言語の悪いところ。笑
だいたいこの辺りがC言語の1つの大きな壁の1つだと思う。使えたら便利だけどねw
ランダムアクセスできないリスト構造をソートしろとかいうナンセンスな課題でなかなかてこずった。
そんな課題にナンセンスなプログラムでバブルソートを実現したので参考程度にしてください。
ついでにCファイルも公開しときます。(課題に関する部分は削除したのでエラー出たらスミマセン)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
struct list { double data; struct list *next; }; /*省略*/ void bubble_sort(struct list *p) { struct list *head; struct list *back; double tmp = 0; double sum = 0; int i,j,k; int data_count = 0; head = p; //データ数をカウント while(p != NULL){ data_count++; p = p->next; } for(i=0;i<data_count-1;i++){ for(j=data_count-1;j>i;j--){ p = head; for(k=0,p=head;k<j-1;k++){ p = p->next;} back = p; //1つ前のノードをbackに格納 p = p->next;//比較先のノードをpに格納 //backとpを絶対値に関して比較 if(fabs(p->data)<fabs(back->data)){ tmp = p->data; p->data = back->data; back->data = tmp; } } } } |