ソートに関する質問です


c++
で書いています。sum[10]を降順にソートして表示したいのですがどのようにすればいいのでしょうか。今だとただsumが全て表示されるだけでソートされた状態で表示されないです。

[code]

    #include<stdio.h>
    
    int main()
    {
        FILE *f;
        float exam_result[30], xmax, sum[10], sumdummy;
        int i, j, jmin, n;
    
        f = fopen("ファイル名", "r");
        if(f == NULL){
            printf("ファイル名を開けません"¥n");
            return 1; 
        }
    
        for(i = 0; i < 30; i = i + 3)
            fscanf(f, "%g", exam_result[i]);
    
        fclose(f);
    
        if(n == 0){
            printf("ファイル名にはデータがありません);
            return1;
        }
    
        for(j = 0; j <= 10; j++){
            sum[j] = exam_result[3 * j] + exam_result[3 * j + 1] + exam_result[3 * j + 2];
        }
    
        for(j = 0; j < 10; j = j + 1){
            if(sum[j] < sum[jmin]) jmin = j;
        }
    
        if(j != jmin){
            sumdummy = sum[j];
            sum[j] = sum[jmin];
            sum[jmin] = sumdummy;
        }
    
        for(j = 0; j <= 3; j++){
            printf ("%g", sum[j]);
        }
    
        return 0;
    }
    
[/code]




「std::sortは使わずに」は質問者さん以外の閲覧者さんにあまり役に立たないですので、C++言語として回答します。なお、ソートと言っても[様々なソートアルゴリズム](https://ja.wikipedia.org/wiki/%E3%82%BD%E3%83%BC%E3%83%88#%E3%82%BD%E3%83%BC%E3%83%88%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%E3%81%AE%E4%B8%80%E8%A6%A7)があります。質問者さんはどれを用いるかをまず検討し、それを明記しなければ質問文が完成しません。

* * *

C++言語でソートを行う場合、[`std::sort`](https://cpprefjp.github.io/reference/algorithm/sort.html)が用意されています。特に今回のように先頭４位までに限定したソートを行う場合、[`std::partial_sort`](https://cpprefjp.github.io/reference/algorithm/partial_sort.html)が用意されています。降順で比較を行うためには[`std::greater`](https://cpprefjp.github.io/reference/functional/greater.html)を使います。ソート範囲を表す際、アドレスでも構わないですが、[`std::begin`](https://cpprefjp.github.io/reference/iterator/begin.html)及び[`std::end`](https://cpprefjp.github.io/reference/iterator/end.html)を用いることもできます。

これらを用いて、降順に４位までの間を開けずに１行で出力するには次のように書けます。

[code]

    #include <algorithm>
    #include <fstream>
    #include <iostream>
    #include <iterator>
    
    int main() {
        struct {
            float kokugo, suugaku, eigo;
        } results[10];
        if (std::ifstream f{ "ファイル名" }; !f) {
            std::cout << "ファイル名を開けません" << std::endl;
            return 1;
        } else {
            for (auto& [kokugo, suugaku, eigo] : results)
                f >> kokugo >> suugaku >> eigo;
        }
    
        float sum[10];
        int j = 0;
        for (auto& [kokugo, suugaku, eigo] : results)
            sum[j++] = kokugo + suugaku + eigo;
    
        std::partial_sort(std::begin(sum), std::begin(sum) + 4, std::end(sum), std::greater{});
    
        for (int i = 0; i < 4; i++)
            std::cout << sum[i];
        return 0;
    }
    
[/code]

