Bài 70: Bài tập Java - Trộn 2 mảng trong Java

Ngày đăng: 1/2/2023 2:08:31 PM

Bài tập Java - Trộn 2 mảng trong java

Đề bài: Viết chương trình Java nhập 2 mảng số thực a0, a1, a2, …, an và b0, b1, b2, …, bm. Giả sử 2 mảng này đã được sắp xếp tăng dần. Hãy tận dụng tính sắp xếp của 2 dãy và tạo dãy c0, c1, c2, …, cn+m là hợp của 2 dãy trên sao cho ci cũng có thứ tự tăng dần.


Lời giải

Trộn 2 mảng trong java.

Trộn 2 mảng trong java

File: BaiTap24.java

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54    

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

package vn.viettuts.baitap.array;

 

import java.util.Scanner;

 

/**

 * Chương trình mảng số thực a0, a1, a2, …, am-1 và b0, b1, b2, …, bn-1.

 * Giả sử 2 mảng này đã được sắp xếp tăng dần.

 * Hãy tận dụng tính sắp xếp của 2 dãy và tạo dãy c0, c1, c2, …, cm+n-1

 * là hợp của 2 dãy trên sao cho ci cũng có thứ tự tăng dần

 *

 * @author viettuts.vn

 */

public class BaiTap26 {

    public static Scanner scanner = new Scanner(System.in);

     

    /**

     * main

     *

     * @param args

     */

    public static void main(String[] args) {

        float[] a = null;

        float[] b = null;

        float[] c = null;

 

        System.out.println("---Nhập mảng a---");

        a = input(a);

        System.out.println("---Nhập mảng b---");

        b = input(b);

         

        // trộn mảng a và b thành c

        c = merge(a, b);

         

        // in mảng c ra màn hình

        show(c);

    }

     

    /**

     * nhập mảng

     *

     * @param arr: mảng số nguyên

     */

    public static float[] input(float[] arr) {

        System.out.print("Nhập số phần tử của mảng: ");

        int n = scanner.nextInt();

        // khởi tạo arr

        arr = new float[n];

        System.out.print("Nhập các phần tử của mảng: ");

        for (int i = 0; i < n; i++) {

            System.out.printf("a[%d] = ", i);

            arr[i] = scanner.nextInt();

        }

        return arr;

    }

     

    /**

     * sắp xếp mảng số nguyên theo thứ tự tăng dần

     *

     * @param arr: mảng các số nguyên

     * @param n: số phần tử của mảng

     */

    public static void sortASC(float [] arr) {

        float temp = arr[0];

        for (int i = 0 ; i < arr.length - 1; i++) {

            for (int j = i + 1; j < arr.length; j++) {

                if (arr[i] > arr[j]) {

                    temp = arr[j];

                    arr[j] = arr[i];

                    arr[i] = temp;

                }

            }

        }

    }

     

    /**

     * trộn mảng a và b vào mảng c

     * sao cho c cũng duy trì thứ tự tăng dần.

     *

     * @param a: mảng a

     * @param b: mảng b

     * @return mảng c

     */

    public static float[] merge(float[] a, float[] b) {

        int aIndex = a.length - 1;

        int bIndex = b.length - 1;

        int cIndex = a.length + b.length - 1;

        float[] c = new float[cIndex + 1];

         

        // sắp xếp các mảng theo thứ tự tăng dần

        sortASC(a);

        sortASC(b);

         

        // trộn mảng a và b thành c

        for (int i = cIndex; i > -1; i--) {

            if (aIndex > -1 && bIndex > -1) {

                if (a[aIndex] > b[bIndex]) {

                    c[i] = a[aIndex--];

                } else {

                    c[i] = b[bIndex--];

                }

            } else if (bIndex == -1) {

                c[i] = a[aIndex--];

            } else if (aIndex == -1) {

                c[i] = b[bIndex--];

            }

        }

        return c;

    }

     

    /**

     * in các phần tử của mảng ra màn hình

     *

     * @param arr: mảng các số nguyên

     * @param n: số phần tử của mảng

     */

    public static void show(float[] arr) {

        for (int i = 0; i < arr.length; i++) {

            System.out.print(arr[i] + " ");

        }

    }

}

Kết quả:

 ---Nhập mảng a---
 Nhập số phần tử của mảng: 7
 Nhập các phần tử của mảng: 
 a[0] = 2
 a[1] = 3
 a[2] = 4
 a[3] = 5
 a[4] = 6
 a[5] = 7
 a[6] = 8
 ---Nhập mảng b---
 Nhập số phần tử của mảng: 5
 Nhập các phần tử của mảng: 
 a[0] = 1
 a[1] = 2
 a[2] = 7
 a[3] = 9
 a[4] = 10
 1.0 2.0 2.0 3.0 4.0 5.0 6.0 7.0 7.0 8.0 9.0 10.0 

Nguồn tin: viettuts