[小西ホームページ]   [目次・索引]   [前の授業]   [次の授業]

情報処理技法(Javaプログラミング)II 第13回

目次
索引

ソート(3)

テキストpp.214--223を参照。


課題13

2つの配列をマージするプログラムを変更すると、配列を集合と見なした場合の共通部分を求めることができます。 ここで、配列 a と配列 b は、それぞれソート済みで値の重複はないと仮定します。

共通部分を求めるには、配列 a 内の注目要素 a [ pa ]と、配列 b 内の注目要素 b [ pb ]が等しければ、その値を配列 c c [ pc ]に格納するとともに、カーソル pa pb pc を進めます。 等しくなければ、小さいほうの値のカーソルのみ進めます。 これを、カーソル pa が配列 a の末尾に達するか、カーソル pb が配列 b の末尾に達するまで繰り返します。 配列 a に残った要素や、配列 b に残った要素は、コピーしません。

まず、p.215のList 6-12のメソッド merge を変更して、配列 a と配列 b の共通部分を配列 c に格納し、共通部分の要素数 pc を返却するようにしてください。 そして、配列 c の画面出力については、 c [0]から c [ pc -1]までにしてください。

MergeArray2.java
class MergeArray2 {
    static int merge(int[] a, int na, int[] b, int nb, int[] c) {
        
        
        return pc;
    }
    public static void main(String[] args) {
        int[] a = {2, 4, 6, 8, 11, 13};
        int[] b = {1, 2, 3, 4, 9, 16, 21};
        int[] c = new int[13];
        
        
    }
}
ターミナル
PS ...\Desktop\java2>  & ... 'MergeArray2'
二つの配列の共通部分
配列aとbの共通部分を配列cに格納しました。
…中略…
c[0] = 2
c[1] = 4
PS ...\Desktop\java2>

余力のある人は、配列 a と配列 b をそれぞれソート済みで値の重複はないと仮定して、配列を集合とみなした場合の和集合を求めてください。

和集合を求めるには、配列 a 内の注目要素 a [ pa ]と、配列 b 内の注目要素 b [ pb ]が等しければ、その値を配列 c c [ pc ]に格納するとともに、カーソル pa pb pc を進めます。 等しくなければ、小さいほうの値を c [ pc ]に格納するとともに、小さいほうのカーソルとカーソル pc を進めます。 これを、カーソル pa が配列 a の末尾に達するか、カーソル pb が配列 b の末尾に達するまで繰り返します。 そして、配列 a と配列 b に残った要素を配列 c にコピーします。

MergeArray3.java
class MergeArray3 {
    static int merge(int[] a, int na, int[] b, int nb, int[] c) {
        
        
        return pc;
    }
    public static void main(String[] args) {
        int[] a = {2, 4, 6, 8, 11, 13};
        int[] b = {1, 2, 3, 4, 9, 16, 21};
        int[] c = new int[13];
        
        
    }
}
ターミナル
PS ...\Desktop\java2>  & ... 'MergeArray3'
二つの配列の和集合
配列aとbの和集合を配列cに格納しました。
…中略…
c[0] = 1
c[1] = 2
c[2] = 3
c[3] = 4
c[4] = 6
c[5] = 8
c[6] = 9
c[7] = 11
c[8] = 13
c[9] = 16
c[10] = 21
PS ...\Desktop\java2>

完成したら、答案(Javaプログラム)をメールで提出してください。 差出人は大学発行のメール・アドレス(学生番号@cis.twcu.ac.jp)とし、宛先はkonishi@cis.twcu.ac.jpとします。 メールの本文には、学生番号、氏名、科目名、授業日(12月19日)を明記してください。


参考文献


[小西ホームページ]   [目次・索引]   [前の授業]   [次の授業]

2025年12月19日更新
小西 善二郎 <konishi@cis.twcu.ac.jp>
Copyright (C) 2025 Zenjiro Konishi. All rights reserved.