C言語で配列を昇順にソートするプログラムの書き方【初心者向け解説】
問題
入力された配列を、昇順または降順に並べ替えるプログラムを作成します。本記事では、C言語を使って配列を昇順にソートする方法を、サンプルコードとともにわかりやすく解説します。
解決策
配列(アレイ)とは、共通の名前を持つ関連性のあるデータ項目の集まりのことです。配列内の個々の値は、「インデックス番号(添字)」によって識別されます。
配列の宣言
配列を宣言するときの基本構文は以下のとおりです。
datatype array_name [size];
具体的な例を見てみましょう。
float marks[50];
この宣言により、「marks」は float 型の要素を50個格納できる配列になります。
int number[10];
こちらの宣言では、「number」は int 型の整数を最大10個まで格納できる配列となります。
各要素には「配列のインデックス」を使ってアクセスできます。添字を指定するだけで目的の要素に簡単にアクセスできるのが配列の大きな特徴です。
昇順ソートのロジック
配列の要素を昇順に並べ替えるための基本的なロジックは以下のとおりです。先頭の要素から順に他の要素と比較し、前の要素が後ろの要素より大きければ値を入れ替えます。この処理をすべての要素に対して繰り返すことで、配列全体が小さい順に整列されます。
for (i = 0; i < n; ++i){
for (j = i + 1; j < n; ++j){
if (num[i] > num[j]){
a = num[i];
num[i] = num[j];
num[j] = a;
}
}
}
このアルゴリズムは「交換ソート(選択ソートの一種)」と呼ばれるもので、計算量は O(n²) です。要素数が少ない場合にはシンプルで理解しやすい手法として広く知られています。
プログラム全体
以下が、配列を昇順にソートするC言語プログラムの完成版です。
#include <stdio.h>
void main (){
int num[20];
int i, j, a, n;
printf("enter number of elements in an array\n");
scanf("%d", &n);
printf("Enter the elements\n");
for (i = 0; i < n; ++i)
scanf("%d", &num[i]);
for (i = 0; i < n; ++i){
for (j = i + 1; j < n; ++j){
if (num[i] > num[j]){
a = num[i];
num[i] = num[j];
num[j] = a;
}
}
}
printf("The numbers in ascending order is:\n");
for (i = 0; i < n; ++i){
printf("%d\n", num[i]);
}
}
プログラムの流れ:
- まず、格納する要素数 n をユーザーに入力してもらいます。
- 続いて、n 個の数値を配列 num[] に読み込みます。
- 二重ループの中で要素同士を比較し、必要に応じて値を交換します。
- 最後に、ソート済みの配列を画面に出力します。
実行結果
上記のプログラムを実行すると、次のような結果が得られます。
enter number of elements in an array 5 Enter the elements 12 23 89 11 22 The numbers in ascending order is: 11 12 22 23 89
このように、入力された5つの数値が正しく昇順(小さい順)に並べ替えられて出力されていることが確認できます。降順にしたい場合は、比較条件の if (num[i] > num[j]) を if (num[i] < num[j]) に変更するだけで対応できます。
-
【Python入門】リスト(配列)の要素を昇順に並べ替える方法|sortメソッドの使い方
Pythonでリスト(配列)の要素を昇順に並べ替えたい場合は、sortメソッドを使います。sortメソッドはデフォルトで昇順にソートしてくれるため、引数を指定しなくても簡単に並べ替えが可能です。また、降順に並べ替えたい場合は、reverseパラメータにTrueを指定するだけで対応できます。以下に具体的な使用例を示します。サンプルコードmy_list = [44, 56, 42, 31, 11, 23, 78, 89, 9, 0] print(The list is :) print(my_list) my_list.sort() print(The list after sorting is
-
C++で行列の対角要素を昇順にソートするプログラムの実装方法
n × m の行列 Mat が与えられたとき、左上から右下へ向かう各対角線(斜め方向)に沿って要素を昇順に並べ替えることを考えます。つまり、すべての対角線上の要素がそれぞれ独立にソートされた状態にします。例えば、次のような入力行列があったとします。331122121112この場合、出力される行列は次のようになります。111112221233解決のためのアプローチこの問題は「同じ対角線上にある要素を一度取り出してソートし、元の位置に書き戻す」というシンプルな発想で解決できます。具体的には、以下の手順に従います。solve() というメソッドを定義します。引数として対角線の開始位置 si、sj と