

昇順のプログラムの一部を下に記載します。

[code]

    void sort(int a[],int n)
    {
        int i,j,min,t;
        i=0;
        while(i<n){
            min=i;
            j=i+1;
            while(j<n){
                if(a[j]<a[min]){
                    min=j;
                }
                j=j+1;
            }
            t=a[i],a[i]=a[min],a[min]=t;
            i=i+1;
        }
    }
    
[/code]

まず一つ目は、void sort(int a[],int n)のint nが何を意味するのかがわかりません（int
a[]はおそらくリストを意味するのだと思いました。）

2つ目は、int
i,jの関係について、iは単純にリストの数字についてを言っており、jはリスト番号のことを言っているのだと思いますが、上記の10行目についてmin=a[j]ではいけないのでしょうか。

３つ目は、j=i+1の意味を知りたいです。

後半の意味は全くわからないので、とりあえず、上記の3つの意味についてを知りたいです。それから後半の意味を考えたいです。


CC BY-SA 4.0
2020-04-14T11:43:02.197
65615
2020-04-15T03:16:26.977
2020-04-15T03:16:26.977
3060
36412
question
c
昇順のプログラムについて、色々わかりませんでした


  1. `int a[]`は他言語ではリストと言ったりもしますが、`C`言語では配列でしょう。  
そして`int n`は渡された配列(`int a[]`)の長さ(要素数)です。  
文字の配列ならば、最後に0x00を入れることで終端を表しますが、ここで渡される`int
a[]`は`int`の配列なので、0は1つの有効な値でしょうから、それは使えません。  
(仕様として1以上の値の配列であるとすることも出来ますが、あまり使わないと思われます)

  2. `i`と`j`は両方ともソートの比較処理の対象を指す、配列のインデックスです。  
同様に、`min`も最小値を指すインデックスです。最小値そのものを保持しているのでは無いので、`min=a[j]`ではいけません。`min=a[j]`はインデックスではなく値を取得する処理です。

  3. `j = i + 1`は大小比較のためのもう一方の値のインデックスを`i`(開始位置)の1つ次に設定しています。  
`j = i`としても自分自身なので処理出来ますが、比較処理を1個増やすよりは良いでしょう。


CC BY-SA 4.0
2020-04-14T12:27:57.297
65616
2020-04-14T12:51:03.967
2020-04-14T12:51:03.967
26370
26370
65615
answer


プログラムを理解する前にアルゴリズム（解法）を理解したほうがよいんだと思います。

このソートは[選択ソート](https://ja.wikipedia.org/wiki/%E9%81%B8%E6%8A%9E%E3%82%BD%E3%83%BC%E3%83%88)と呼ばれる種類のものです。未ソートなデータ列の中から最小値を探し先頭と入れ替えると昇順にソートされるよね、というロジックです。

例：開始状態で、データ `2 3 1` データ個数 `3` 今回開始位置 `0` とします。

・仮の最小値として添字 `[0]` （今回開始位置）のデータ `2` を選びます  
・今、添字 `[0]` は既にチェックしたわけなので、それ以外の範囲つまり `[1, 3)` 中に仮最小値より小さいものがあるかどうかを調べます (範囲
`[0, 3)` を調べてもいいわけですが `[0]` を調べるのは無駄)  
・見つかった最小値は添字 `[2]` にあるので `[0]` と `[2]` をいれかえて１回目終了 (データは `1 3 2` になった)  
・処理が１回終わった＝最小要素を１つ見つけたので、今回開始位置を `1` としてループを継続  
・最後の要素は必然的に最大値となるのでループ回数はデータ個数より１小さい

提示ソースコードは選択ソートの手順を忠実に実装してあります。なのでソースコード内の各種変数がオイラのこの説明で書いた文言のどれにあたるかを読み取れれば、なぜこのようなコードになっているかは十分理解可能でしょう。


CC BY-SA 4.0
2020-04-15T01:12:17.200
65624
2020-04-15T01:12:17.200
8589
65615
answer