Nội dung chính
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.
File: BaiTap24.java
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: \n");
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