Skip to content

[C言語]線形リストのバブルソート

大学の課題で線形リストのバブルソートについての課題が出た際に作ったプログラム。

線形リストやらポインタやらが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;
                           }
                }
        }
}

DOWNLOAD:bubble_sort.c

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です