大学の課題で線形リストのバブルソートについての課題が出た際に作ったプログラム。
線形リストやらポインタやらがC言語の悪いところ。笑
だいたいこの辺りがC言語の1つの大きな壁の1つだと思う。使えたら便利だけどねw
ランダムアクセスできないリスト構造をソートしろとかいうナンセンスな課題でなかなかてこずった。
そんな課題にナンセンスなプログラムでバブルソートを実現したので参考程度にしてください。
ついでにCファイルも公開しときます。(課題に関する部分は削除したのでエラー出たらスミマセン)
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;
}
}
}
}