how to sort a 2D array by way of insertion sort?

Put your programming skills to the test in these challenges.

how to sort a 2D array by way of insertion sort?

Post by ghostheadx2 on Sat Jan 30, 2016 6:02 pm
([msg=91446]see how to sort a 2D array by way of insertion sort?[/msg])

I want to sort this by using selection sort and display the sorted values in the output and in the command line:

Code: Select all
          import java.util.*;
          import java.io.*;
          class newversion {
            public static int [][] table; // the output table
            public static int numOfRows; //number of rows used up in the table

            public static int lookfor(int productID){
              int location = -1; //-1 an error
              for(int i = 0; i < numOfRows; i++){
                if (table[i][0] == productID){
                  location = i;
                }
              }
              return location;
            }
          /*
            here is my modified bubble sort code. I based it on this, but done differently:

            http://stackoverflow.com/questions/23283655/bubble-sort-on-2d-array-java

            public static void swap(int int1, int int2, int[] array) {
              if(int1 == int2){
                return;
              }
              else{
              int temp = int2;
              array[int2] = array[int1];
              array[int2] = temp;
            }
            }
            but it didn't work and I had to try something else
          */
            public static boolean contains(int productID){
              if (lookfor(productID) == -1){
                return false;
              }
                return true;
            }

            public static void main(String[] args) {
              File file = null;
              Scanner scanner = null;
              try{
                file = new File("data.csv");
                scanner = new Scanner( file );
              }
              catch(Exception e){
                System.out.println("Error opening file!");
                System.exit(1);
              }

              //citation of idea for sorting method in 2D array: http://stackoverflow.com/questions/23283655/bubble-sort-on-2d-array-java
              //I'm using bubble sort on a 2D array
              //this is his code
              /*


              private static void bubblesort(Integer[] array) {
            for (int i = 0; i < array.length; i++) {
                for(int j = 0; j < array.length - 1; j++) {
                    if(array[j].compareTo(array[j+1]) > 0) {
                        swap(j, j+1, array);
                    }
                }
            }

          }

          private static void swap(Integer int1, Integer int2, Integer[] array) {
              if(int1 == int2)return;
              Integer temp = new Integer(array[int2]);
              array[index2] = array[int1];
              array[int1] = temp;

          }
              */
              //here's my idea for bubble sort on a 2D array
          /*
              for (int i = 0; i < numOfRows; i++){
                for(int j = 0; j < numOfRows - 1; j++) {
                  if(table[j][0].compareTo(array[j+1][0]) > 0) {
                          swap(j, j+1, table);
                      }
              }
              //this didn't work well either
              //Now, I have to try another for-loop
          */
               //Count the number of lines in the file
               //Now I will try insertion sort



               int size_of_file = 0;
               while (scanner.hasNextLine()){
                 scanner.nextLine();
                 size_of_file++;
               }
               table = new int[size_of_file][2];

/*               for (int i = 1; i < numOfRows; i++){
                 int temp1 = table[i][0];
                 int temp2 = table[i][1];
                 int j = temp1 - 1;
                 while (j >= 0 && table[j][0] > temp1){
                   table[j + 1][0] = table[j][0];
                   table[j + 1][1] = table [j][1];
                 }
               }

               the above is my attempt at insertion sort
               */

               //reset scanner
               try{
                 file = new File("data.csv");
                 scanner = new Scanner( file );
               }
               catch(Exception e){
                 System.out.println("Error opening file!");
                 System.exit(1);
               }

              //save the title
              String titleLine = scanner.nextLine();
              System.out.println(titleLine);
              //for each line in the file, store and total it.
              numOfRows=0;
              while (scanner.hasNextLine()){
                String ln = scanner.nextLine();
                String[] row = ln.split(",");
                System.out.println(row[0] + ", " + row[1]);
                if (contains(Integer.parseInt(row[0]))){
                  //This is the location in the table where the product id exists already.
                  int location = lookfor(Integer.parseInt(row[0]));
                  //add the units to what we have in the table
                  table[location][1] += Integer.parseInt(row[1]);
                }
                else{
                  table[numOfRows][0]= Integer.parseInt(row[0]);
                  table[numOfRows][1]= Integer.parseInt(row[1]);
                  numOfRows++;
                }
              }
              //output
              try{
                PrintWriter output = new PrintWriter("output.csv");
                output.println(titleLine);
                for(int i=0;i<numOfRows;i++){
                    output.println(table[i][0] + "," + table[i][1]);
                }

                output.close();
              }
              catch(Exception e){
                System.out.println("Error writing file");
              }
            }
          }



Excel File to read from:

Code: Select all
Product ID   Units                     
10002   4                     
10004   6                     
10008   2                     
10010   3                     
10010   3                     
10007   10                     
20003   4                     
20003   7                     
30019   1                     
30020   9                     
10004   9                     
10006   7                     
20005   5                     
30004   10                     
20004   2                     
30002   7                     
30013   6                     
20005   5                     
30006   1                     
30006   7                     
30007   2                     
30012   10                     
30015   7                     
30015   3                     
10001   5                     
20001   8                     
30007   3                     
30014   3                     
30015   6                     
30016   2                     
10001   8                     
10003   8                     
10007   5                     
10007   8                     
20005   6                     
20006   10                     
30003   4                     
30011   7                     
30014   7                     
30016   5                     
20003   1                     
30003   4                     
30010   5                     
30011   8                     
30012   1                     
30014   9                     
30016   4                     
30018   5                     
10006   1                     
10010   9                     
20005   5                     
30001   1                     
30004   9                     
30007   5                     
30009   1                     
30014   6                     
30016   5                     
30016   2                     
30020   8                     
10004   3                     
10004   7                     
10008   2                     
20001   4                     
20003   7                     
20004   6                     
20006   2                     
30001   1                     
30003   7                     
30004   1                     
30004   10                     
30005   2                     
30006   7                     
30017   10                     
30018   2                     
30004   6                     
10009   9                     
10009   7                     
10010   10                     
20005   3                     
30002   1                     
30004   2                     
30004   8                     
30013   3                     
30019   3                     
10004   10                     
10007   5                     
30001   7                     
30003   6                     
30006   2                     
30006   3                     
30007   2                     
30013   8                     
30016   8                     
10003   6                     
10004   9                     
10004   2                     
10006   8                     
10010   1                     
20003   9                     
20003   10                     
30001   8                     
30002   1                     
30013   5                     
30015   7                     
30018   1                     
30019   10                     
30020   9                     
10008   1                     
10009   3                     
20004   10                     
30010   7                     
30012   9                     
30014   7                     
30017   4                     
20004   5                     
30005   8                     
30010   7                     
30011   1                     
10004   9                     
10004   4                     
10006   5                     
10010   7                     
20001   3                     
20003   2                     
20004   7                     
30004   8                     
30010   2                     
30012   5                     
30019   8                     
30020   1                     
10008   7                     
30001   9                     
30003   10                     
30003   8                     
30006   5                     
30008   10                     
30009   7                     
30009   8                     
30015   9                     
30017   9                     
30018   7                     
30020   1                     
10001   7                     
10002   10                     
10003   3                     
10005   4                     
10010   4                     
20001   4                     
20002   1                     
20005   5                     
30006   9                     
30006   6                     
10003   7                     
10003   4                     
10004   6                     
10009   6                     
20002   6                     
20004   3                     
20005   3                     
30001   9                     
30005   2                     
30006   10                     
30008   6                     
30009   6                     
30011   10                     
30013   8                     
30013   3                     
30013   5                     
30015   1                     
30019   10                     
10002   6                     
10004   7                     
10006   3                     
10006   2                     
20002   6                     
20004   7                     
20004   7                     
30005   4                     
30006   8                     
30007   3                     
30008   6                     
30009   8                     
30014   5                     
30015   10                     
30015   9                     
30018   3                     
30019   2                     
30019   9                     
30020   1                     
10006   10                     
20003   2                     
30001   3                     
30005   5                     
30012   5                     
30015   5                     
30015   3                     
30016   2                     
30019   8                     
30019   5                     


I am allowed to convert it to a csv file to make it easier if I want.

I want to sort it into a 2D array by the first column, by product ID, with each product ID keeping its corresponding number of units. I've decided I really want to use insertion sort.
ghostheadx2
Contributor
Contributor
 
Posts: 728
Joined: Wed Nov 19, 2014 1:19 am
Blog: View Blog (0)


Return to Programming

Who is online

Users browsing this forum: No registered users and 0 guests