Combined Quicksort and Insertion Sort Algorithm
From Java Example Source Code
Contents |
[edit] Overview - Combined Quicksort and Insertion Sort Algorithm
This is a Java example program.
[edit] Java Source Code
- Package: example.sortsearch
- File: CombineQuickSortInsertionSort.java
package example.sortsearch; public class CombineQuickSortInsertionSort { private long[] data; private int len; public CombineQuickSortInsertionSort(int max) { data = new long[max]; len = 0; } public void insert(long value) { data[len] = value; len++; } public void display() { System.out.print("Data:"); for (int j = 0; j < len; j++) System.out.print(data[j] + " "); System.out.println(""); } public void quickSort() { recQuickSort(0, len - 1); } public void recQuickSort(int left, int right) { int size = right - left + 1; if (size < 10) // insertion sort if small insertionSort(left, right); else // quicksort if large { long median = medianOf3(left, right); int partition = partitionIt(left, right, median); recQuickSort(left, partition - 1); recQuickSort(partition + 1, right); } } public long medianOf3(int left, int right) { int center = (left + right) / 2; // order left & center if (data[left] > data[center]) swap(left, center); // order left & right if (data[left] > data[right]) swap(left, right); // order center & right if (data[center] > data[right]) swap(center, right); swap(center, right - 1); return data[right - 1]; } public void swap(int d1, int d2) { long temp = data[d1]; data[d1] = data[d2]; data[d2] = temp; } public int partitionIt(int left, int right, long pivot) { int leftPtr = left; // right of first elem int rightPtr = right - 1; // left of pivot while (true) { // find bigger while (data[++leftPtr] < pivot) ; // find smaller while (data[--rightPtr] > pivot) ; if (leftPtr >= rightPtr) // if pointers cross, partition done break; else swap(leftPtr, rightPtr); } swap(leftPtr, right - 1); // restore pivot return leftPtr; // return pivot location } public void insertionSort(int left, int right) { int in, out; // sorted on left of out for (out = left + 1; out <= right; out++) { long temp = data[out]; // remove marked item in = out; // start shifts at out // until one is smaller, while (in > left && data[in - 1] >= temp) { data[in] = data[in - 1]; // shift item to right --in; // go left one position } data[in] = temp; // insert marked item } } public static void main(String[] args) { int maxSize = 16; CombineQuickSortInsertionSort arr = new CombineQuickSortInsertionSort(maxSize); for (int j = 0; j < maxSize; j++) { long n = (int) (java.lang.Math.random() * 99); arr.insert(n); } arr.display(); arr.quickSort(); arr.display(); } }
[edit] What Result You Can Get
Run the program, you will get:
Data:23 57 41 5 54 24 73 23 34 21 72 96 20 61 93 4 Data:4 5 20 21 23 23 24 34 41 54 57 61 72 73 93 96
[edit] Required External Libraries and/or Files for this Java Example
Need nothing.
[edit] How to Run this Java Example Program
We recommend running this Java example program with Eclipse.
For assistance in working with Eclipse, please see How to Run Java Program with Eclipse.
It's fairly easy.
[edit] Question & Answer
Any question?
Click edit and post your question or answer here.
