Home > front end >  How to sort an array with null elements using insertion sort
How to sort an array with null elements using insertion sort

Time:12-31

If I am using insertion sort as shown below and have an array with some elements that are integers and then some that are null - How would I go about sorting that array with the null elements at the end using insertion sort?

For example: [1, 2, 6, null, 9, 5, 4, null, 2, 3] To: [1, 2, 2, 3, 4, 5, 6, 9, null, null]

public static <T extends Comparable<? super T>> void
            insertionSort(T[] array) {
        for (int sorted = 0; // only the first element is sorted
             sorted < array.length - 1;
             sorted  ) { 

            T newElement = array[sorted   1]; 

            int compareTo = sorted; 
            while (compareTo >= 0 && 
                    newElement.compareTo(array[compareTo]) < 0) {

                
                array[compareTo   1] = array[compareTo];
                compareTo--;
            }
            
            array[compareTo   1] = newElement;
        }
    }

CodePudding user response:

One option is to write a compareTo function that handles null:

public static <T extends Comparable<? super T>> int compareTo(T a, T b)
{
    if (a == null && b == null) return 0;
    if (a == null) return 1;
    if (b == null) return -1;
    return a.compareTo(b);
}

Then have the insertion sort use that:

while (compareTo >= 0 && compareTo(newElement, array[compareTo]) < 0) {

CodePudding user response:

It can be done with Comparator.nullsLast:

public static <T extends Comparable<? super T>> void insertionSort(T[] array) {
    Comparator<T> comparator = Comparator.nullsLast(Comparator.naturalOrder());
    // ...
    int compareTo = sorted;
    while (compareTo >= 0 && comparator.compare(newElement, array[compareTo]) < 0) {
    // ...
}
  • Related