【C言語】10個の要素を持つ配列を昇順にソートするプログラムの作り方
配列とは
配列とは、関連性のある複数のデータ項目を、たった一つの名前でまとめて管理できるデータ構造です。
例: int student[30];
この場合、studentが配列名となり、1つの変数名だけで30個分のデータ項目を格納することができます。
配列に対する主な操作
配列に対して行える基本的な操作は、以下の通りです。
探索(検索) − 配列内に特定の要素が存在するかどうかを調べる操作です。
ソート(整列) − 配列内の要素を昇順または降順に並べ替える操作です。
走査(トラバース) − 配列内のすべての要素を先頭から順番に処理する操作です。
挿入 − 配列に新しい要素を追加する操作です。
削除 − 配列から不要な要素を取り除く操作です。
昇順ソートの考え方
本プログラムでは、「スワップ(値の入れ替え)」というテクニックを使って、配列の要素を昇順に並べ替えます。具体的には、先頭の要素とそれ以降のすべての要素を順番に比較し、手前の要素のほうが大きければ入れ替える処理を繰り返すことで、小さい値から順に整列させていきます。
配列を昇順にソートするためのロジックは、以下のようになります。
for(i=0;i<10-1;i++){
for(j=i+1;j<10;j++){
if(element[i]>element[j]){
temp=element[i]; //element[i]とelement[j]を入れ替える
element[i]=element[j];
element[j]=temp;
}
}
}
外側のループで基準となる位置を決め、内側のループでそれより後ろにある要素と比較します。より小さな値が見つかるたびに入れ替えることで、各周回が終わった時点では、その位置に「残りの要素の中で最小の値」が収まる仕組みです。
サンプルプログラム
以下は、10個の要素を持つ配列を昇順にソートするC言語のプログラムです。
#include<stdio.h>
int main(){
int element[10],i,j,temp;
printf("10個の整数を入力してください:");
for(i=0;i<10;i++){
scanf("%d",&element[i]);
}
for(i=0;i<10-1;i++){
for(j=i+1;j<10;j++){
if(element[i]>element[j]){
temp=element[i]; //element[i]とelement[j]を入れ替える
element[i]=element[j];
element[j]=temp;
}
}
}
printf("昇順に並べ替えた結果:\n");
for(i=0;i<10;i++)
printf("%d\n",element[i]);
return 0;
}
実行結果
このプログラムを実行すると、以下のような出力が得られます。
10個の整数を入力してください: 12 23 34 1 22 34 56 45 33 78 昇順に並べ替えた結果: 1 12 22 23 33 34 34 45 56 78
まとめ
このように、二重ループとスワップ処理を組み合わせるだけで、特別なライブラリ関数に頼らずに配列を昇順へソートできます。要素数が少ないデータなら十分実用的な方法ですが、件数が多い場合や本格的な開発では、標準ライブラリのqsort関数などを活用するのも有効な選択肢です。
-
C++プログラム:配列内の各要素の最後の出現を相対的な順序で出力する方法
配列 a[] が与えられたとき、リスト内の各要素について最後に出現したものだけを出力するのが本記事の目的です。ここでは単純に重複要素を削除するだけでなく、各要素が配列内で最後に出現したタイミングに基づき、元の相対的な順序を維持したまま出力する必要があります。例えば、6つの要素を持つ配列 {1, 3, 2, 3, 1, 2} には重複した値が含まれています。この場合、期待される結果は「3 1 2」になります。入力例と出力例Input: a[]={4,2,2,4,1,5,1} Output : 2 4 5 1この例では、「2」はインデックス2で最後に出現し、「4」はインデックス3、「5」はインデッ
-
C++で行列の対角要素を昇順にソートするプログラムの実装方法
n × m の行列 Mat が与えられたとき、左上から右下へ向かう各対角線(斜め方向)に沿って要素を昇順に並べ替えることを考えます。つまり、すべての対角線上の要素がそれぞれ独立にソートされた状態にします。例えば、次のような入力行列があったとします。331122121112この場合、出力される行列は次のようになります。111112221233解決のためのアプローチこの問題は「同じ対角線上にある要素を一度取り出してソートし、元の位置に書き戻す」というシンプルな発想で解決できます。具体的には、以下の手順に従います。solve() というメソッドを定義します。引数として対角線の開始位置 si、sj と