快速排序:采用分而治之的策略。
1.先从数组中取出一个数作为基准数。
2.一趟排序之后,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
1.先从数组中取出一个数作为基准数。
2.一趟排序之后,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
package cn.zhf.sort;
public class QuickSort {
public static void main(String[] args) {
int[] array = {4,25,1,3,2,6,5};
int[] result = qsort(array,0,array.length-1);
print(result);
}
//交换
private static void swap(int a[], int i, int j) {
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
//分治过程,将小于等于point移到左边,大于point的其移到右边
private static int partition(int a[], int p, int r) {
int point = a[r];
int index = p;
for (int i = index; i < r; ++i) {
if (a[i] - point <= 0) {
swap(a, index++, i);
}
}
swap(a, index, r);
return index;
}
public static int[] qsort(int a[], int p, int r) {
if (p < r) {
// 确定拆分点,并对数组元素进行移动
int q = partition(a, p, r);
// 对左半段排序
qsort(a, p, q - 1);
// 对右半段排序
qsort(a, q + 1, r);
}
return a;
}
//打印数组
public static void print(int[] array){
for(int i=0;i<array.length;i++){
System.out.println(array[i]);
}
}
}