1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

選択ソートをCで書いた

Last updated at Posted at 2019-12-22

#選択ソート(C言語)

#選択ソートとは
・インプレース整数アルゴリズム。選択ソートは小さなファイルに適している。
・昇順(小さい順)のときは最小値、降順(大きい順)のときは最大値を見つけることを繰り返し行う。
・n個の要素を整列させるのにn-1回の交換が行われる。
パス1でn-1回の比較
パス2でn-2回の比較...(比較対象のデータが1つ減るため)
なので、(n-1)+(n-2)+・・・+1=n(n-1)/2回の比較が行われる。

#利点
・わかりやすい
・インプレースソート(追加の記憶領域が不要)
・バブルソートより高速
#欠点
・規模による計算量の悪化:O(n²)

#全体的な流れ
1.リスト内の最小値(最大値)を見つける。
2.現在の位置の値と交換する。
3.配列全体を整列するまでこの処理をすべての要素に繰り返す。

#実装にあたって
C言語で実装する。
英語と数学の点数を降順(大きい順)に表示する。データの並び替えに選択ソートを用いる。

#コード

selection_sort.c
#include <stdio.h>
#define NMAX 1000
int main(){
    int eigo[NMAX], math[NMAX], gokei[NMAX], n, max, work;
    printf("data="); scanf("%d", &n);
    for (int i = 0; i <n ; ++i) {
        printf("[%3dbanme]=", i); scanf("%d %d", &eigo[i], &math[i]);
        gokei[i]=eigo[i]+math[i];
    }
    for (int i = 0; i <n-1 ; ++i) {
        max=i;
        for (int j = i+1; j <n ; ++j) {
            if (gokei[j]>gokei[max]) max=j;
        }
        if(i!=max) {
            work=eigo[i];eigo[i]=eigo[max];eigo[max]=work;
            work=math[i];math[i]=math[max];math[max]=work;
            work=gokei[i];gokei[i]=gokei[max];gokei[max]=work;
        }
    }
    printf("*** RESULTS ***\n");
    printf("RANK   ENGLISH   MATH   TOTAL\n");
    for (int i = 0; i <n ; ++i) {
        printf("%4d%6d%6d%6d\n", i, eigo[i], math[i], gokei[i]);
    }
}

#ソートの計算量

種類 計算量
最悪時計算量 O(n²)
最良時計算量 O(n)
平均計算量 O(n²)
最悪時空間計算量 O(1)補助領域

またなにかあったら書き加えるかもしれません

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?