<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ソート | 基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</title>
	<atom:link href="https://fenavi.seplus.jp/tag/%E3%82%BD%E3%83%BC%E3%83%88/feed/" rel="self" type="application/rss+xml" />
	<link>https://fenavi.seplus.jp</link>
	<description>基本情報技術者試験を学習する人のためにつくられた専門メディア。250本以上の記事を掲載し、勉強方法や各分野のポイント、過去問解説など、試験に役立つ情報を発信。試験対策書籍を執筆する著者が、はじめて学ぶ人でもわかりやすく解説します。（2023年度からの新制度に対応済み）</description>
	<lastBuildDate>Wed, 19 Aug 2026 10:08:06 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1</generator>
	<item>
		<title>ソートのアルゴリズム｜つまづきやすいポイントと攻略法 徹底解説！</title>
		<link>https://fenavi.seplus.jp/strategy_guide/fe_strategy10/</link>
		
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
		<pubDate>Wed, 19 Aug 2026 10:00:28 +0000</pubDate>
				<category><![CDATA[アルゴリズム]]></category>
		<category><![CDATA[ソート]]></category>
		<category><![CDATA[再帰呼び出し]]></category>
		<category><![CDATA[勉強方法]]></category>
		<guid isPermaLink="false">/?post_type=strategy_guide&#038;p=8988</guid>

					<description><![CDATA[<p>この連載は、基本情報技術者試験の受験者を対象としたものです。 毎回1つのテーマにしぼって、多くの受験者がつまづきやすいポイントと攻略法を解説します。 今回のテーマはソートのアルゴリズムです。 ソートのアルゴリズムの種類  [&#8230;]</p>
<p>The post <a href="https://fenavi.seplus.jp/strategy_guide/fe_strategy10/">ソートのアルゴリズム｜つまづきやすいポイントと攻略法 徹底解説！</a> first appeared on <a href="https://fenavi.seplus.jp">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>この連載は、基本情報技術者試験の受験者を対象としたものです。</p>
<p>毎回1つのテーマにしぼって、多くの受験者がつまづきやすいポイントと攻略法を解説します。</p>
<p>今回のテーマは<span style="color: #4b0082;"><strong>ソートのアルゴリズム</strong></span>です。</p>
<h2>ソートのアルゴリズムの種類</h2>
<p>
<strong>ソート</strong>（sort）とは、配列を昇順（小さい順）や降順（大きい順）に整列することです。<br />
基本情報技術者試験の知識と技能の細目を示したシラバスという資料には、ソートのアルゴリズムとして、<strong>選択ソート、バブルソート、マージソート、挿入ソート、シェルソート、クイックソート、ヒープソート</strong>が示されています。</p>
<p>科目Aには、これらのアルゴリズムの名称と処理内容の説明文を対応付ける問題が出ます。<br />
科目Bには、これらのアルゴリズムを擬似言語で示したプログラムを読み取る問題が出ます。<br />
したがって、ソートのアルゴリズムに関する問題を攻略するには、それぞれのアルゴリズムを理解することはもちろんですが、<strong>それぞれのアルゴリズムをプログラムで経験することも必要です。</strong>
</p>
<p>
ソートのアルゴリズムは、それらをプログラムにしたときの仕組みから、以下のように分類できます。<br />
<strong>多重ループ</strong>とは、繰り返し処理の中で別の繰り返し処理を行うことです。<br />
<strong>再帰呼び出し</strong>とは、関数（または手続）の中で同じ関数（または手続）を呼び出すことで繰り返し処理を実現することです。<br />
<strong>シェルソート</strong>は、挿入ソートを改良したアルゴリズムです。
</p>
<div style="background-color: #ededed; padding: 15px; border-radius: 5px; margin: 10px 0;">
<p style="margin: 0 0 10px 0;"><span style="color: #4b0082;"><strong>【多重ループを使うアルゴリズム】</strong></span><br />
  選択ソート、バブルソート、挿入ソート</p>
<p style="margin: 0 0 10px 0;"><span style="color: #4b0082;"><strong>【再帰呼び出しを使うアルゴリズム】</strong></span><br />
  マージソート、クイックソート、ヒープソート</p>
<p style="margin: 0;"><span style="color: #4b0082;"><strong>【他のアルゴリズムを改良したアルゴリズム】</strong></span><br />
  シェルソート（挿入ソートを改良したもの）</p>
</div>
<p>
アルゴリズムを理解するには、手作業でやってみるとよいでしょう。<br />
教材（受験者であれば何らかの教材をお持ちでしょう）でアルゴリズムの説明を読んだら、カードに数字を書いたものを配列の要素に見立てて、手作業でソートしてみるのです。<br />
これで、科目Aの問題が解けるようになります。
</p>
<p>
アルゴリズムを十分に理解できたら、それをプログラムで経験してください。<br />
擬似言語では、プログラムを動作させられないので、JavaやPythonなどのプログラミング言語を使ってください。<br />
インターネットを「Java クイックソート」や「Python クイックソート」のようにプログラミング言語とアルゴリズムの名称をスペースで区切って検索すれば、実際に動作するプログラムを紹介しているページがいくつか見つかりますので、それらを参考にしてプログラムを作って動作を確認してください。<br />
これで、科目Bの問題が解けるようになります。
</p>
<p>
選択ソート、バブルソート、マージソート、挿入ソート、シェルソート、クイックソート、ヒープソートのすべてを理解し、それらをプログラムとして経験するには、かなりの時間がかかるでしょう。<br />
ただし、この経験によって、プログラミングやアルゴリズムの理解が一気に深まり、苦手意識が一気に解消するはずです。<br />
基本情報技術者試験に合格したいなら、がんばって取り組んでください。
</p>
<h2>ソートのアルゴリズムに関する科目Aの問題の例</h2>
<p>
ソートのアルゴリズムをテーマとした科目Aと科目Bの問題を見てみましょう。<br />
手作業でアルゴリズムを理解していれば科目Aの問題は解けますが、プログラムを経験していないと科目Bの問題は解けないことがわかるはずです。<br />
以下は、クイックソートをテーマとした科目Aの問題（出典：H30秋問6）です。
</p>
<div class="card-panel mag_h30 c-round">
<h3><span class="bold">問題1（出典：H30秋問6）</span></h3>
<p>クイックソートの処理方法を説明したものはどれか。</p>
<p>ア　既に整列済みのデータ列の正しい位置に，データを追加する操作を繰り返していく方法である。</p>
<p>イ　データ中の最小値を求め，次にそれを除いた部分の中から最小値を求める。この操作を繰り返していく方法である。</p>
<p>ウ　適当な基準値を選び，それよりも小さな値のグループと大きな値のグループにデータを分割する。同様にして，グループの中で基準値を選び，それぞれのグループを分割する。この操作を繰り返していく方法である。</p>
<p>エ　隣り合ったデータの比較と入替えを繰り返すことによって，小さな値のデータを次第に端の方に移していく方法である。</p>
</div>
<p>
手作業でソートのアルゴリズムを経験していれば、それぞれの選択肢が何というアルゴリズムの説明であるかがわかるでしょう。<br />
「整列済みのデータ列にデータを追加する」ということから、選択肢アは挿入ソートです。<br />
「最小値を求めることを繰り返す」ということから、選択肢イは選択ソートです。<br />
「基準値より小さなグループと大きなグループに分割する」ということから、選択肢ウはクイックソートです。<br />
「隣り合ったデータの比較と入れ替えを繰り返す」ということから、選択肢エはバブルソートです。</p>
<p>したがって、選択肢ウが正解です。
</p>
<h2>ソートのアルゴリズムに関する科目Bの問題の例</h2>
<p>
以下は、クイックソートをテーマとした科目Bの問題（出典：R05公開問3）です。
</p>
<div class="card-panel mag_h30 c-round">
<h3><span class="bold">問題2（出典：R05公開問3）</span></h3>
<p>次の記述中の <span style="display: inline-block; width: 60px; height: 18px; border: 2px solid #000; vertical-align: middle;"></span> に入れる正しい答えを，解答群の中から選べ。ここで，配列の要素番号は1から始まる。</p>
<p style="margin-top: 15px; text-indent: 1em;">
    次の手続 sort は，大域の整数型の配列 data の，引数 first で与えられた要素番号から引数 last で与えられた要素番号までの要素を昇順に整列する。ここで，first ＜ last とする。手続 sort を sort(1, 5) として呼び出すと，/*** α ***/ の行を最初に実行したときの出力は “ <span style="display: inline-block; width: 60px; height: 18px; border: 2px solid #000; vertical-align: middle;"></span> ” となる。
  </p>
<figure style="display: block; width: 100%; max-width: 600px; margin: 0 auto;">
<div class="material-placeholder">
    <img decoding="async" src="/wordpress/wp-content/uploads/2026/08/fb127d914c59745c3dbdfe2bb12b9883.jpg" alt="" style="width: 100%; height: auto; display: block;" />
  </div>
</figure>
<p>解答群</p>
<p>ア 　１ ２ ３ ４ ５<br />
イ 　１ ２ ３ ５ ４<br />
ウ 　２ １ ３ ４ ５<br />
エ 　２ １ ３ ５ ４</p>
</div>
<p>
この問題には、ソートのプログラムであることは示されていますが、何というアルゴリズムであることかは示されていません。<br />
ただし、ソートのアルゴリズムをプログラムで経験していれば、クイックソートだとわかるはずです。<br />
ポイントとなるのは、 pivot という名前の変数を使っていることと、再帰呼び出しを使っていることです。
</p>
<p>
クイックソートでは、配列の中から基準値を選んで、残りの要素を基準値より小さいグループと大きいグループに分割することを繰り返します。<br />
クイックソートのプログラムでは、基準値を格納する変数の名前を pivot とするのが一般的です。<br />
また、分割の繰り返しは、while文やfor文ではなく、再帰呼び出しを使うのが一般的です。<br />
このプログラムには、手続 sort の処理の中で手続 sort を呼び出している部分がありますが、それが再帰呼び出しです。
</p>
<p>
クイックソートだとわかれば、プログラムを隅々まで読み取る必要はありません。<br />
{2, 1, 3, 5, 4}という配列が、1回目の繰り返し処理の後で、どのようにグループ分けされるかを答える問題なので、基準値をどのように決めているのかを読み取れれば、選択肢の中から正解を選べます。
</p>
<p>
「pivot ← data[(first ＋ last)÷2の商]」という処理で基準値を変数pivotに代入しています。<br />
1回目の繰り返し処理では、first＝1、last＝5なので「pivot ← data[(1 ＋ 5)÷2の商]」であり、pivotは3になります。<br />
{2, 1, 3, 5, 4}という配列は、3を基準値にすると、既にグループ分けができています（既に、3の前に3より小さい値があり、3の後に3より大きい値がある状態になっている）。<br />
したがって、1回目の繰り返し処理の後では、{2, 1, 3, 5, 4}は{2, 1, 3, 5, 4}のままであり、選択肢エが正解です。
</p>
<hr class="mag_tp50 mag_bt50" />
<p>
今回は、「ソートのアルゴリズム」のポイントと攻略法を解説しました。<br />
このテーマが苦手だった受験者の参考になれば幸いです。
</p>
<p>
それでは、またお会いしましょう！
</p>
<style>
h4 {
  font-size: 1.1rem;
}
h3 + h4 {
  margin: 1em 0 1em;
}
div.card-panel {
  padding: 3rem;
}
@media screen and (orientation: portrait){
div.card-panel {
  padding: 2rem;
}
}
div.card-panel > h3 {
  font-size: 1.2em;
  padding-left: 1em;
  border-left: 5px solid #3f51b5;
}
div.card-panel > h3:first-of-type {
  margin-top: 0;
}
div.card-panel .chip {
    background-color: #3f51b5;
}
</style><p>The post <a href="https://fenavi.seplus.jp/strategy_guide/fe_strategy10/">ソートのアルゴリズム｜つまづきやすいポイントと攻略法 徹底解説！</a> first appeared on <a href="https://fenavi.seplus.jp">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
