This post is the second part of DPBO practical final exam on programming. For other parts, please see:

- 1st part: Longest Common Substring (Problem A1).

This problem appears as both Problem A2 and C2. The problem description is given below:

*You are given a Bubble Sort sorting program. This program provides a sorting method below. *

public static void sort(int var[]) { int temp; for (int i=var.length-1; i>1; i--) { for (int j=0; j < i; j++) { if (var[j] > var[j+1]) { temp = var[j]; var[j] = var[j+1]; var[j+1] = temp; } } } for(int j=0; j<var.length; j++) System.out.print(var[j] + " "); System.out.println(""); }

*The above method sorts an array of integers according to the bubble sort algorithm. The task is to build a generic version of this method that accepts multivariable list arguments, i.e., one can call the method as in the following statements:*

sort(30, 5, 3, 9, 10, 2, 25); sort("aku", "sedang", "ujian", "programming");

*Furthermore, the task requires that the final loop which prints out the contents of the array in the sorted order must be implemented using an enhanced for-loop form (making use the fact that array is an Iterable object).*

The solution for this problem is given below, together with the original sort method.

/** * This class is a solution for problems A2 and C2 in DPBO programming exam. * Both problems are actually the same problem. A "sort" method is given, and * the task is to provide a generic version of the method that accepts multi-variable list * arguments. In addition, parts of code that prints out the sorted data must be changed * using enhanced-for-loop form, making use the fact that the data array is iterable. */ public class BubbleSort { // Write your generic sort method here. // You are not allowed to change the order of the program statements. // Make as little change as possible in making the generic method. // The original "sort" method is given below as "public static void sort(int[])" /** * The new "sort" method: generic, accepts multi-variable list arguments and * uses enhanced for-loop to display the sorted data. * * Notice the use of type parameter which must be a Comparable object because otherwise, * it cannot be compared to each other in doing sorting (the sort method is actually * an implementation of bubble-sort algorithm which is indeed a comparison-based sorting * algorithm). The multi-variable list argument is adjusted accordingly to accommodate * generics. * * @param <T> the generic type of input data. * @param vars the input data to be sorted. */ public static > void sort(T ... vars) { // This variable is used in swapping array elements. // Originally, it's an int type and here is adjusted accordingly // to allow for generic type of input data. T temp; // The main nested loop is not changed. for (int i=vars.length-1; i > 1; i--) { for (int j=0; j < i; j++) { // The if-block below compares two adjacent elements of input data. // The generic version uses compareTo method from java.lang.Comparable. if (vars[j].compareTo(vars[j+1]) > 0) { temp = vars[j]; vars[j] = vars[j+1]; vars[j+1] = temp; } } } // enhanced for-loop to display the sorted data for (T v : vars) System.out.print(v + " "); System.out.println(); } /** * The original "sort" method given by the problem which accepts an array of integers * and sort its contents accordingly. * * @param var array of integers as input data */ public static void sort(int var[]) { int temp; for (int i=var.length-1; i>1; i--) { for (int j=0; j < i; j++) { if (var[j] > var[j+1]) { temp = var[j]; var[j] = var[j+1]; var[j+1] = temp; } } } // display sorted data // change the for-loop to an enhanced for-loop form for(int j=0; j<var.length; j++) System.out.print(var[j] + " "); System.out.println(""); } public static void main( String[] args ) { // The original main method contains the two lines below // int data[] = {30, 4, 7, 5}; // sort(data); sort(30, 5, 3, 9, 10, 2, 25); sort("aku", "sedang", "ujian", "programming"); } }

## Leave a Reply