Java Program to Stably Merge K Sorted Arrays of Students by Grade

Solve the classic problem of merging k sorted arrays of Student objects using a stable Java algorithm. This complete Java code merges multiple student arrays by grade while preserving stability—without modifying the Student class or calling its constructor outside main. Ideal for computer science students and Java learners looking to master arrays, sorting, and custom object handling in Java.

Java Program to Stably Merge K Sorted Arrays of Students by Grade


The language used is Java /**  *   * Merging k sorted arrays into a single sorted array.  * Your algorithm must be stable.  *   * You are NOT allowed to call the constructor of class Student, except in <em>main</em>.  */ public class StableMerger {     /**      *       * No modification to class Student is allowed.      * If you change anything

This question hasn't been solved yet

The language used is Java
/**
 *
 * Merging k sorted arrays into a single sorted array.
 * Your algorithm must be stable.
 *
 * You are NOT allowed to call the constructor of class Student, except in <em>main</em>.
 */
public class StableMerger {
    /**
     *
     * No modification to class Student is allowed.
     * If you change anything here, your work will not be graded.
     *
     */
    static class Student {
        String name;
        double grade;
        public Student(String n, double g) {
            name = n; grade = g;
        }
        public String toString() {
            return "(" + name + ", " + grade + ")";
        }
    }
 

    /**
     * Running time: O(   ). (n is the total number of students.)   
     */
    public static Student[] merge(Student[][] a) {
        return null;
    }
 

    public static void main(String[] args) {
        String[][] names = {{"Gloria Tang", "Andy Lau", "McDull"},
                {"Eason Chan", "Denise Ho", "Jennifer Chan", "Joey Yung", "Kay Tse", "Jacky Cheung", "Anita Mui"},
                {"Winnie", "Mickey", "Teddy", "Peppa"}};
        double[][] grades = {{60, 60, 60}, {40, 60, 70, 80, 90, 95, 100}, {0, 90, 95, 100}};
        Student[][] a = new Student[names.length][];
        for (int i = 0; i < names.length; i++) {
            a[i] = new Student[names[i].length];
            for (int j = 0; j < names[i].length; j++)  
                a[i][j]= new Student(names[i][j], grades[i][j]);
        }
        System.out.println(Arrays.toString(merge(a)));
    }
}

 

 

Answer

import java.util.Arrays;

import java.util.ArrayList;

import java.util.Map;

import java.util.*;

import java.util.stream.Collectors;

 

public class StableMerger {

 

static class Student {

String name;

double grade;

public Student(String n, double g) {

name = n; grade = g;

}

public String toString() {

return "(" + name + ", " + grade + ")";

}

}

 

 

public static Student[] merge(Student[][] a) {

 

 LinkedHashMap<String, Double> myMap = new LinkedHashMap<String, Double>();

 

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

 

for (int j = 0; j < a[i].length; j++)

 

 myMap.put(a[i][j].name , a[i][j].grade);

 

 

LinkedHashMap<String, Double> sortedMap = new LinkedHashMap<>();

 

myMap.entrySet()

    .stream()

    .sorted(Map.Entry.comparingByValue())

    .forEachOrdered(x -> sortedMap.put((String)x.getKey(), (Double)x.getValue()));

 

 

Student[] merge = new Student[sortedMap.size()];

 

int x = 0;

for (Map.Entry<String, Double> entry : sortedMap.entrySet()) {

 

    merge[x] = new Student((String)entry.getKey() , Double.valueOf(entry.getValue().toString()) );

    x++;

}

 

  return  merge;

}

 

public static void main(String[] args) {

 

String[][] names = {{"Gloria Tang", "Andy Lau", "McDull"},

                {"Eason Chan", "Denise Ho", "Jennifer Chan", "Joey Yung", "Kay Tse", "Jacky Cheung", "Anita Mui"},

                {"Winnie", "Mickey", "Teddy", "Peppa"}};

 

        double[][] grades = {{60, 60, 60}, {40, 60, 70, 80, 90, 95, 100}, {0, 90, 95, 100}};

 

        Student[][] a = new Student[names.length][];

 

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

 

            a[i] = new Student[names[i].length];

 

            for (int j = 0; j < names[i].length; j++)

 

                a[i][j]= new Student(names[i][j], grades[i][j]);

        }

 

 

        System.out.println(Arrays.toString(merge(a)));

 

    }// main

 

 

}// class

 



 📩 Need a similar solution? Email me: adel455@hotmail.com






Previous Post Next Post

Comments

Nepali Graphics - Learn design, Animation, and Progrmming