递归实现
public Class QuickSort{
public static void qSort(int[] array, int low, int high) {
if (array == null) {
return;
}
if (low < high) {
int mid = patition(array, low, high);
qSort(array, low, mid - 1);
qSort(array, mid + 1, high);
}
}
public static int patition(int[] array, int low, int high) {
int start = low;
int end = high;
int temp = array[start];
while (start < end) {
while (start < end && array[end] >= temp)
end--;
array[start] = array[end];
while (start < end && array[start] <= temp)
start++;
array[end] = array[start];
}
array[start] = temp;
return start;
}
}
非递归实现
public Class QuickSort{
public static void qSort(int[] array, int start, int end){
int low = start;
int high = end ;
Stack<Integer> index = new Stack<Integer>();
index.push(start);
index.push(end);
while(!index.isEmpty()){
high = index.pop();
low = index.pop();
int position = partition(array, low, high);
if(low < position - 1){
index.push(low);
index.push(position-1);
}
if(high > position + 1){
index.push(position+1);
index.push(high);
}
}
}
public static int partition(int[] array , int low, int high){
int start = low;
int end = high;
int temp = array[low];
while(start < end){
while(start < end && array[end] > temp)
end--;
array[start] = array[end];
while(start < end && array[start] < temp)
start++;
array[end] = array[start];
}
array[start] = temp;
return start;
}
}
常见排序一览表