値の探索(整数)
はじめに
ここでは、リニアサーチ(線形探索法)を使って配列の値を探索する方法を説明します。
この方法は単純で、配列の最初の値から順番に、検索する値と同じ値を探していきます。同じ値が見つかったら処理を終了します。
この方法は単純な方法なので、プログラミングは簡単です。
ただし、配列に格納されている値を順番に探索していくため、要素数が多いと検索するのに時間がかかるというデメリットがあります。要素数が少ない配列の場合は、この方法は実用的です。
Javaソースコード
LinearSearchInt.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044
public class LinearSearchInt { // 指定した値を配列から検索 // 検索対象の値を格納した配列ary // 検索する値をseekval static int linearsearch( int[] ary, int seekval ) { // forで順番に値を比較する for ( int i = 0; i < ary.length; i++ ) { // 一致する値が見つかった場合、その添え字を戻す if ( ary[ i ] == seekval ) return i; } // seekvalと一致する値が無い場合、-1を戻す return -1; } // メイン public static void main( String[] args ) { // 配列に任意の値を格納 int[] ary = { 84, 17, 33, 2, 67, 55, 49 }; // 値の検索 int ans, seekval; // 67を検索 seekval = 67; ans = linearsearch( ary, seekval ); if ( 0 > ans ) System.out.println( seekval + "は配列に存在しません!" ); else System.out.println( seekval + "はary[" + ans + "]にあります" ); // 5を検索 seekval = 5; ans = linearsearch( ary, seekval ); if ( 0 > ans ) System.out.println( seekval + "は配列に存在しません!" ); else System.out.println( seekval + "はary[" + ans + "]にあります" ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis LinearSearchInt.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac LinearSearchInt.java
実行
C:\talavax\javasample>java LinearSearchInt
出力結果
67は配列のary[4]にあります 5は配列に存在しません!
Javaソースコードの解説
それでは、ここからソースコードを解説していきます。
001
public class LinearSearchInt {
クラス名を、LinearSearchとしています。
002 003 004 005 006
// 指定した値を配列から検索 // 検索対象の値を格納した配列ary // 検索する値をseekval static int linearsearch( int[] ary, int seekval ) {
リニアサーチ(線形探索法)を行うlinearsearchメソッドです。int型の配列aryと検索する値seekvalを渡して配列の添え字を戻します。seekvalと同じ値が配列の中に無い場合は-1を戻します。
007 008 009 010 011 012 013
// forで順番に値を比較する for ( int i = 0; i < ary.length; i++ ) { // 一致する値が見つかった場合、その添え字を戻す if ( ary[ i ] == seekval ) return i; }
for文を使って、配列の値をary[0]からary[ary.length]まで順番にseekvalと同じ値かを判定し、同じ値であれば添え字の変数iの値を戻します。同じ値が見つからない場合はforループを抜けて-1を戻します。
020 021
// メイン public static void main( String[] args ) {
このmainメソッドからプログラムを実行します。
022 023
// 配列に任意の値を格納 int[] ary = { 84, 17, 33, 2, 67, 55, 49 };
025 026
// 値の検索 int ans, seekval;
028 029 030 031 032 033 034
// 67を検索 seekval = 67; ans = linearsearch( ary, seekval ); if ( 0 > ans ) System.out.println( seekval + "は配列に存在しません!" ); else System.out.println( seekval + "はary[" + ans + "]にあります" );
036 037 038 039 040 041 042
// 5を検索 seekval = 5; ans = linearsearch( ary, seekval ); if ( 0 > ans ) System.out.println( seekval + "は配列に存在しません!" ); else System.out.println( seekval + "はary[" + ans + "]にあります" );
以上です。