算法原理见:
http://blog.csdn.net/morewindows/article/details/6684558
写的很通俗易懂了。
然后按照文章里的理论,写了一把代码。也算通俗易懂^^
package sort;
import java.util.Arrays;
import java.util.Random;
public class FastSort {
/**
*
*
* @param array source array
* @param start, start and end,def a range of array should sort
* @param end
*/
private static void sort(int[] array, int start, int end) {
int i = start;
int j = end;
/*用来比较的标准值
* 当array[i]>stand的时候,将array[i]移动到stand的后面
* 当array[j]<=stand的时候,将array[j]移动到stand的前面
*/
int stand = array[i];
int flag = 0;//0比较end,1比较start
while (i != j) {
if (flag == 0) {
if (stand < array[j]) {
j--;
} else {
array[i] = array[j];
i++;
flag = 1;
}
} else {
if (stand >= array[i]) {
i++;
} else {
array[j] = array[i];
j--;
flag = 0;
}
}
}
//停止位,将该值设置成stand
array[i] = stand;
//左边,右边分别排序
if (start < i - 1) {
//在i的左边不止一个数组
sort(array, start, i - 1);
}
if (i < end - 1) {
//在i的右边不止一个数组
sort(array, i + 1, end);
}
}
public static void sort(int[] array) {
sort(array, 0, array.length - 1);
}
public static void main(String[] args) {
int[] arr = new int[1000];
Random r = new Random();
for (int i = 0; i < 1000; i++) {
arr[i] = r.nextInt(1000);
}
sort(arr);
System.out.println(Arrays.toString(arr));
}
}