CS 112
Fall 2026
  • Home
  • Syllabus
  • Staff
  • Office Hours
  • Labs
  • Problem Sets
  • Resources
  • Collaboration
  • Lectures
  • Piazza
  • Gradescope

Problem Set 6

due by 11:59 p.m. on Tuesday, October 27th, 2026

Important

Don’t forget that each of your methods should be preceded by a comment that explains what your method does and what its inputs are. In addition, you should include a comment at the top of each Java file, and you should use good programming style more generally.

In addition, you should continue to follow the other guidelines that we gave you in the prior problem sets. In particular, see here.

  • Preliminaries
  • Part I
    • Creating the necessary file
    • Problem 1: Basic Sorting practice
    • Problem 2: Comparing two algorithms
    • Problem 3: More Sorting practice
    • Problem 4: Even more practice with sorting - Quicksort
    • Problem 5: Even more practice with sorting - Mergesort
    • Submitting your work for Part I
  • Part II
    • Problem 6: Finding the union of two arrays
    • Problem 7: Finding pairs that sum to k
  • Submitting Your Work
    • Submitting your work for Part II

Preliminaries

In your work on this assignment, make sure to abide by the collaboration policies of the course.

If you have questions while working on this assignment, please come to office hours or post them on Piazza.

Make sure to follow the instructions outlined at the end of Part I and Part II when submitting your assignment.


Part I

36 points total

Creating the necessary file

Problems in Part I will be completed in a single PDF file. To create it, you should do the following:

  1. Open the template that we have created for these problems in Google Docs: ps6_partI

  2. Select File->Make a copy..., and save the copy to your Google Drive using the name ps6_partI.

  3. Add your work to this file.

  4. Once you have completed all of these problems, choose File->Download->PDF document, and save the PDF file on your machine. The resulting PDF file (ps6_partI.pdf) is the one that you will submit. See the submission guidelines at the end of Part I.

Problem 1: Basic Sorting practice

6 points; 2 points for each part; individual-only

Important: When answering these questions, make sure to apply the versions of these algorithms in the Sort class we give you. The Java code for each algorithm can be found in our Sort class.

Given the following array:

{11, 19, 5, 25, 34, 41, 9, 4, 13}
  1. If the array were sorted using selection sort, what would the array look like after the third pass of the algorithm (i.e., after the third time that the algorithm performs a pass or partial pass through the elements of the array)?

  2. If the array were sorted using insertion sort, what would the array look like after the fifth iteration of the outer loop of the algorithm?

  3. If the array were sorted using the (non optimized) version of bubble sort presented in lecture, what would the array look like after the fourth pass of the algorithm?

Important

There will be no partial credit on the above questions, so please check your answers carefully!

Problem 2: Comparing two algorithms

7 points; individual-only

Suppose that you want to find the largest element in an unsorted array of n elements. Algorithm A searches the entire array sequentially and keeps track of the largest element seen thus far. Algorithm B sorts the array using insertion sort, and then reports the last element as the largest.

  1. What is the big-O time efficiency of Algorithm A in the best, average, and worst cases? Explain your answer briefly. (You do not need to implement either algorithm. We just want you to analyze them.)

  2. What is the big-O time efficiency of Algorithm B in the best, average, and worst cases? Explain your answer briefly.

  3. Which algorithm has a more efficient run-time complexity? Explain briefly.

Problem 3: More Sorting practice

12 points; 2 points for each part; individual-only

Important: When answering these questions, make sure to apply the versions of these algorithms in the Sort class we give you. The Java code for each algorithm can be found in our Sort class.

Given the following array:

{15, 8, 28, 14, 25, 21, 11, 34}
  1. If the array were sorted using selection sort, what would the array look like after the second pass of the algorithm (i.e., after the second time that the algorithm performs a pass or partial pass through the elements of the array)?

  2. If the array were sorted using insertion sort, what would the array look like after the fourth iteration of the outer loop of the algorithm?

  3. If the array were sorted using the version of bubble sort presented in lecture, what would the array look like after the third pass of the algorithm?

  4. If the array were sorted using the version of quicksort presented in lecture, what would the array look like after the first call to the partition() method?

  5. If the array were sorted using the version of quicksort presented in lecture, what would the array look like after the second call to the partition() method?

  6. If the array were sorted using the version of mergesort presented in lecture, what would the array look like after the completion of the fourth call to the merge() method—the method that merges two subarrays? Note: the merge method is the helper method; is not the recursive mSort method.

Problem 4: Even more practice with sorting - Quicksort

5 points; individual-only

Important: When answering these questions, make sure to apply the versions of these algorithms that are in the Sort class we give you. The Java code for each algorithm can be found in our Sort class.

Given the following array:

{15, 8, 28, 14, 25, 21, 11, 34}
  1. If the array were sorted using quicksort, what would the array look like after the third call to the partition method?

  2. If the array were sorted using quicksort, what would the array look like after the fourth call to the partition method?

Problem 5: Even more practice with sorting - Mergesort

6 points; 2 points for each part; individual-only

Given the following array:

{25, 4, 28, 14, 37, 3, 51, 13}
  1. If the array were sorted using the version of mergesort presented in lecture, what would the array look like after the completion of the second call to the merge() method—the method that merges two subarrays? Note: The merge method is the separate helper method; is not the recursive mSort method.

  2. What would the array look like after the completion of the fourth call to the merge() method?

  3. The initial call to the recursive mSort() method is made from within the mergeSort() “wrapper” method. This initial call to mSort() is not a recursive call, because the method is not calling itself. Rather, all recursive calls to mSort() are made from within mSort().

    Assuming that the array has at least two elements, the initial invocation of mSort() makes two recursive calls (which in turn lead to other recursive calls, and so on). Starting with the initial array above, what would the array look like after the completion of the first of these two recursive calls?

Important

There will be no partial credit on the above questions, so please check your answers carefully!

Submitting your work for Part I

Note: There are separate instructions at the end of Part II that you should use when submitting your work for that part of the assignment.

Submit your ps6_partI.pdf file using these steps:

  1. If you still need to create a PDF file, open your ps6_partI file on Google Drive, choose File->Download->PDF document, and save the PDF file on your machine.

  2. Login to Gradescope by clicking the link in the left-hand navigation bar, and click on the box for CS 112.

  3. Click on the name of the assignment (PS 6: Part I) in the list of assignments on Gradescope. You should see a pop-up window labeled Submit Assignment. (If you don’t see it, click the Submit or Resubmit button at the bottom of the page.)

  4. Choose the Submit PDF option, and then click the Select PDF button and find the PDF file that you created. Then click the Upload PDF button.

  5. You should see a question outline along with thumbnails of the pages from your uploaded PDF. For each question in the outline:

    • Click the title of the question.
    • Click the page(s) on which your work for that question can be found.

    As you do so, click on the magnifying glass icon for each page and doublecheck that the pages that you see contain the work that you want us to grade.

  6. Once you have assigned pages to all of the questions in the question outline, click the Submit button in the lower-right corner of the window. You should see a box saying that your submission was successful.

Important

  • It is your responsibility to ensure that the correct version of every file is on Gradescope before the final deadline. We will not accept any file after the submission window for a given assignment has closed, so please check your submissions carefully using the steps outlined above.

  • If you are unable to access Gradescope and there is enough time to do so, wait an hour or two and then try again. If you are unable to submit and it is close to the deadline, make a private post on Piazza with your homework before the deadline.


Part II

25 points total

For the following problems:

  1. Download our Sort class, making sure to save it in your ps6 folder.

  2. In VSCodium, select the File->Open Folder or File->Open menu option, and use the resulting dialog box to find and open your ps6 folder. (Note: You must open the folder; it is not sufficient to simply open the file.)

Problem 6: Finding the union of two arrays

20 points total; individual-only

In a file named MergeApproach.java, implement a static method named union that takes two arrays of integers as parameters and uses an approach based on merging to find and return the union of the two arrays – i.e., all values that are found in both arrays.

The method should have the following header

public static int[] union(int[] a1, int[] a2)

It should take two arrays of integers a1 and a2, and it should use an approach based on merging to create and return a new array containing the union of the values in a1 and a2 – i.e., all values that are found in one or both of the original arrays. The result should be in sorted order, and it should not include any duplicate values. For example, the following test code:

int[] a1 = {10, 5, 7, 5, 9, 4};
int[] a2 = {7, 5, 15, 7, 7, 9, 10};
int[] result1 = union(a1, a2);
System.out.println("result1: " + Arrays.toString(result1));

int[] a3 = {0, 2, -4, 6, 10, 8};
int[] a4 = {12, 0, -4, 8};
int[] result2 = union(a3, a4);
System.out.println("result2: " + Arrays.toString(result2));

should display:

result1: [4, 5, 7, 9, 10, 15, 0, 0, 0, 0, 0, 0, 0]
result2: [-4, 0, 2, 6, 8, 10, 12, 0, 0, 0]

(Note that we end up with extra 0s at the end of both of these result arrays for reasons that are discussed below.)

For full credit, your method must be as efficient as possible. See below for more details.

Required approach

  1. Begin by creating a new array for the union, giving it a length that is the sum of the lengths of the two original arrays.

  2. Use one of the more efficient sorting algorithms from our Sortclass to sort both of the original arrays. If you have downloaded our Sort class into the same folder (see above) you should be able to make method calls to an appropriate method in the Sort class from within your union method.

  3. Find the union of the two arrays by employing an approach that is similar to the one that we used to merge two sorted subarrays (i.e., the approach taken by the merge method in Sort.java)—using indices to “walk down” the two original arrays and copy their values into the array that you created for the union.

    Important notes:

    • One important difference between merging and finding the union is that the union should not include any duplicates. In other words, a given number that appears in one or both of the original arrays should appear exactly once in the union. As a result, you will need to include code that skips over duplicate values as needed as you walk down the original arrays.

    • Your algorithm should be as efficient as possible. In particular, you should perform at most one complete pass through each of the arrays.

  4. At the end of the method, return a reference to the array containing the union.

  5. Add test code for your method to a main method. Recall that that you can use the Arrays.toString() method to convert an array to a string; import the java.util. package to gain access to the Arrays class. In addition to the cases shown above, you should include at least one other test case that you create.

Notes:

  • Because we don’t include duplicates in the result, the number of values in the union (call it x) can be smaller than the length of the results array (which should be the sum of the lengths of the original arrays). In such cases, you should end up with extra 0s at the end of the results array as shown in both of our test cases above.

    If 0 appears in one or both of the original arrays, it will also show up earlier in the results array as part of the union, as it does in our second example above.

  • If either a1 or a2 is null, the method should throw an `IllegalArgumentException.

Problem 7: Finding pairs that sum to k

15 points total; individual-only

Suppose you are given an array of n integers, and you need to find all pairs of values in the array (if any) that sum to a given integer k. In a class named PairFinder, write code that performs this task for you and outputs all of the pairs that it finds. For example, if k is 12 and the array is initialized as: {10, 4, 7, 7, 8, 5, 15}, your code should output something like the following:

4 + 8 = 12
7 + 5 = 12
7 + 5 = 12

Note that we get two 7 + 5 sums because 7 appears twice in the array. However, while the methods that you write may print a given pair of values more than once in such cases, it is not necessary to do so. In addition, the order in which the sums (and the terms within each sum) are printed does not matter. If no pairs are found, the methods do not need to print anything.

In a file named PairFinder.java, implement the following:

  1. A static method named findPairSums() that requires O(n²) steps to solve this problem. The method should have the following header:

    public static void findPairSums(int k, int[] arr)
    

    In addition, you should add test code for it to a main method. You may find it helpful to call the randomArray() method from our SortCount class to generate test arrays, although it also makes sense to use literal arrays that you define.

  2. Implement a static method named findPairSumsFaster() that takes the same parameters as findPairSums, but that requires only O(nlogn) steps in the average case to solve this problem. (Hint: you should begin by sorting the array using one of the methods from our Sort class. Once you have done so, only O(n) additional steps are needed to find the pairs.) Here again, you should add test code to the main method.


Submitting Your Work

Submission Checklist:

  • You have read the Java Style Guide (linked on Course page)and followed all guidelines regarding format, layout, spaces, blank lines, and comments;
  • ensured that the signature of the methods specified in the assignment have not been changed.
  • You have verified that your programs satisfy all the performance tests in the templates;

Submitting your work for Part II

You should submit only the following files:

  • MergeApproach.java
  • PairFinder.java

Here are the steps:

  1. Click on the name of the assignment in the list of assignments. You should see a pop-up window with a box labeled DRAG & DROP. (If you don’t see it, click the Submit or Resubmit button at the bottom of the page.)

  2. Add your files to the box labeled DRAG & DROP. You can either drag and drop the files from their folder into the box, or you can click on the box itself and browse for the files.

  3. Click the Upload button.

  4. You should see a box saying that your submission was successful. Click the (x) button to close that box.

  5. The autograder will perform some tests on your files. Once it is done, check the results to ensure that the tests were passed. If one or more of the tests did not pass, the name of that test will be in red, and there should be a message describing the failure. Based on those messages, make any necessary changes. Feel free to ask a staff member for help.

    Note: You will not see a complete Autograder score when you submit. That is because additional tests for at least some of the problems will be run later, after the final deadline for the submission has passed. For such problems, it is important to realize that passing all of the initial tests does not necessarily mean that you will ultimately get full credit on the problem. You should always run your own tests to convince yourself that the logic of your solutions is correct.

  6. If needed, use the Resubmit button at the bottom of the page to resubmit your work. Important: Every time that you make a submission, you should submit all of the files for that Gradescope assignment, even if some of them have not changed since your last submission.

  7. Near the top of the page, click on the box labeled Code. Then click on the name of each file to view its contents. Check to make sure that the files contain the code that you want us to grade.

Important

  • It is your responsibility to ensure that the correct version of every file is on Gradescope before the final deadline. We will not accept any file after the submission window for a given assignment has closed, so please check your submissions carefully using the steps outlined above.

  • Make sure to use these exact file names as specified or we will not be able to find your files and grade them.

  • Make sure that you do not try to submit a .class file or a file with a ~ character at the end of its name.

  • If you make any last-minute changes to one of your Java files (e.g., adding additional comments), you should compile and run the file after you make the changes to ensure that it still runs correctly. Even seemingly minor changes can cause your code to become unrunnable.

  • If we are not able to compile your program, you will not receive any credit for that problem submission.

Last updated on October 27, 2026.