How to implement Insertion Sort in Java

Insertion Sort Implementation


public class Main {
  public static void main(String[] args) {
    int maxSize = 100; // array size
    InsertSort arr; // reference to array
    arr = new InsertSort(maxSize); // create the array
/*from   w  ww .  ja  v  a 2  s . c  om*/
    arr.insert(47);
    arr.insert(99);
    arr.insert(44);
    arr.insert(35);
    arr.insert(22);
    arr.insert(88);
    arr.insert(41);
    arr.insert(00);
    arr.insert(16);
    arr.insert(33);

    arr.display();

    arr.insertionSort();

    arr.display();
  }

}

class InsertSort {
  private long[] number;

  private int nElems;

  public InsertSort(int max) {
    number = new long[max];
    nElems = 0;
  }

  public void insert(long value) {
    number[nElems] = value;
    nElems++;
  }

  public void display() {
    for (int j = 0; j < nElems; j++)
      System.out.print(number[j] + " ");
    System.out.println("");
  }

  public void insertionSort() {
    int in, out;
    // out is dividing line
    for (out = 1; out < nElems; out++) {
      long temp = number[out]; // remove marked item
      in = out; // start shifts at out
      while (in > 0 && number[in - 1] >= temp) // until one is smaller,
      {
        number[in] = number[in - 1]; // shift item to right
        --in; // go left one position
      }
      number[in] = temp; // insert marked item
    }
  }

}

The code above generates the following result.

Object Insertion Sort

The following code shows how to do object Insertion Sort. It compares the person's last name.


public class Main{
  public static void main(String[] args) {
    int maxSize = 100; // array size
    ObjectInsertSort arr = new ObjectInsertSort(maxSize); // create the array
/*  w w  w .ja v  a  2  s  .c o m*/
    arr.insert("Jack", "James", 24);
    arr.insert("James", "Chen", 37);
    arr.insert("Chirs", "Paul", 37);
    arr.insert("Rob", "Tom", 43);
    arr.insert("Carlo", "Sato", 21);
    arr.insert("Al", "Henry", 29);
    arr.insert("Nancy", "Jose", 72);
    arr.insert("Vang", "Minh", 22);

    System.out.println("Before sorting:");
    arr.display(); // display items

    arr.insertionSort(); // insertion-sort them

    System.out.println("After sorting:");
    arr.display(); // display them again
  }  
  
}
class ObjectInsertSort {
  private Person[] a;

  private int nElems;

  public ObjectInsertSort(int max) {
    a = new Person[max];
    nElems = 0;
  }

  // put person into array
  public void insert(String last, String first, int age) {
    a[nElems] = new Person(last, first, age);
    nElems++;
  }

  public void display() {
    for (int j = 0; j < nElems; j++)
      a[j].displayPerson();
  }

  public void insertionSort() {
    int in, out;

    for (out = 1; out < nElems; out++) {
      Person temp = a[out]; // out is dividing line
      in = out; // start shifting at out

      while (in > 0 && // until smaller one found,
          a[in - 1].getLast().compareTo(temp.getLast()) > 0) {
        a[in] = a[in - 1]; // shift item to the right
        --in; // go left one position
      }
      a[in] = temp; // insert marked item
    }
  }


}

class Person {
  private String lastName;

  private String firstName;

  private int age;

  public Person(String last, String first, int a) {
    lastName = last;
    firstName = first;
    age = a;
  }

  public void displayPerson() {
    System.out.print("   Last name: " + lastName);
    System.out.print(", First name: " + firstName);
    System.out.println(", Age: " + age);
  }

  public String getLast() {
    return lastName;
  }
}

The code above generates the following result.





















Home »
  Java Tutorial »
    Development »




Java Algorithms
Java Clipboard
Java Compiler
Java Desktop
Java Virtual Machine
Java Math
OS
Random
Java Robot
Java RuntimeMXBean
Java Timer
Java UUID
Java Internationalization