## 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?

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.