package sort;
public class QuickSort {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = {2,4,7,8,5};
quick_sort(arr, 0, arr.length - 1);
print(arr);
}
/**
* x时间复杂度为O(NlogN),空间O(logN),不稳定
* @param arr
* @param L 左下标
* @param R 右下标
*/
private static void quick_sort(int[] arr, int L, int R) {
// TODO Auto-generated method stub
if (L < R) {
//随机快排,随机选择一个数作为partition 与 R交换位置
//一、[lower,upper)
//(Math.random() * (upper - lower)) + lower;
//二、[lower,upper]
//(Math.random() * (upper - lower + 1)) + lower;
swap(arr, L + (int)(Math.random() * (R - L + 1)), R);
int[] p = partition(arr, L, R);
quick_sort(arr, L, p[0] - 1);
quick_sort(arr, p[1] + 1, R);
}
}
private static int[] partition(int[] arr, int l, int r) {
int less = l - 1;
int more = r;
while (less < more) {
if (arr[l] < arr[r]) {
swap(arr, ++less, l++);
}else if (arr[l] > arr[r]) {
swap(arr, l, --more);
}else {
l++;
}
}
swap(arr, more, r);
return new int[]{less + 1, more};
}
private static void swap(int[] arr, int i, int j) {
// TODO Auto-generated method stub
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
private static void print(int[] arr) {
for (int i : arr) {
System.out.print(i+"\t");
}
}
}
常用排序算法之--------------------------随机快排
猜你喜欢
转载自blog.csdn.net/qq_22193699/article/details/103518312
今日推荐
周排行