快速排序的基本思想:
1、先从数列中取出一个数作为基准数
2、分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边
3、再对左右区间重复第二步,直到各区间只有一个数
以下为java代码实现:
package com.nowcoder;
/**
*
* @author Administrator
*
*/
public class SmallToBig {
private static int partition(int[] array,int start,int end)
{
int key = array[start];
while (start < end) {
while (array[end] >= key && end > start) {
end--;
}
array[start] = array[end];
while (array[start] <= key && end > start) {
start++;
}
array[end] = array[start];
}
array[end] = key;
return end;
}
public static void sort(int [] array, int start, int end) {
if (start >= end) {
return;
}
int index = partition(array, start, end);
sort(array, start, index - 1);
sort(array, index + 1, end);
}
public static void main(String[] args) {
int [] array = {8,3,6,9,2,4,6,5};
int start = 0;
int end = array.length - 1;
sort(array, start, end);
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+" ");
}
}
}
输出结果:
package com.nowcoder;
/**
*
* @author Administrator
*
*/
public class BigToSmall {
private static int partition(int[] array,int start,int end)
{
int key = array[start];
while (start < end) {
while (array[end] <= key && end > start) {
end--;
}
array[start] = array[end];
while (array[start] >= key && end > start) {
start++;
}
array[end] = array[start];
}
array[end] = key;
return end;
}
public static void sort(int [] array, int start, int end) {
if (start >= end) {
return;
}
int index = partition(array, start, end);
sort(array, start, index - 1);
sort(array, index + 1, end);
}
public static void main(String[] args) {
int [] array = {8,3,6,9,2,4,6,5};
int start = 0;
int end = array.length - 1;
sort(array, start, end);
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+" ");
}
}
}
输出结果: