Last active
February 6, 2017 02:51
-
-
Save Chen-tao/9246b77da51d6fa4af1afd511f9472c9 to your computer and use it in GitHub Desktop.
Quicksort is a divide and conquer algorithm. It first divides a large list into two smaller sub-lists and then recursively sort the two sub-lists. If we want to sort an array without any extra space, quicksort is a good option. On average, time complexity is O(n log(n)). The basic step of sorting an array are as follows: - Select a pivot, normal…
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class QuickSort { | |
public static void main(String[] args) { | |
int[] x = { 9, 2, 4, 7, 3, 7, 10 }; | |
System.out.println(Arrays.toString(x)); | |
int low = 0; | |
int high = x.length - 1; | |
quickSort(x, low, high); | |
System.out.println(Arrays.toString(x)); | |
} | |
public static void quickSort(int[] arr, int low, int high) { | |
if (arr == null || arr.length == 0) | |
return; | |
if (low >= high) | |
return; | |
// pick the pivot | |
int middle = low + (high - low) / 2; | |
int pivot = arr[middle]; | |
// make left < pivot and right > pivot | |
int i = low, j = high; | |
while (i <= j) { | |
while (arr[i] < pivot) { | |
i++; | |
} | |
while (arr[j] > pivot) { | |
j--; | |
} | |
if (i <= j) { | |
int temp = arr[i]; | |
arr[i] = arr[j]; | |
arr[j] = temp; | |
i++; | |
j--; | |
} | |
} | |
// recursively sort two sub parts | |
if (low < j) | |
quickSort(arr, low, j); | |
if (high > i) | |
quickSort(arr, i, high); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment