随机快排算法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了随机快排算法相关的知识,希望对你有一定的参考价值。

 1 package Sort;
 2 
 3 import org.junit.Test;
 4 
 5 // 随机快排算法
 6 public class RandQuickSort {
 7 
 8     // 交换数组中的两个元素
 9     public void exchange(int[] array, int index1, int index2) {
10         int tmp = array[index1];
11         array[index1] = array[index2];
12         array[index2] = tmp;
13     }
14 
15     // 分区函数,返回分区的元素下标
16     public int partition(int[] array, int start, int end) {
17         if (start >= end)
18             return -1;
19         int length = end - start + 1;
20         // 产生一个[start.. end]范围内的伪随机下标
21         int pivotIndex = start + (int) Math.floor(Math.random() * length);
22         System.out.println("选取的主元下标为: " + pivotIndex);
23         // 选取array[pivotIndex]作为主元
24         exchange(array, pivotIndex, end);
25         int i = start;
26         int j = end - 1;
27         while (i < j) {
28             // 从数组头部开始,依次找到数组中大于主元的元素
29             while (i <= end && array[i] < array[end])
30                 ++i;
31             // 从数组尾部开始,依次找到数组中小于主元的元素
32             while (j >= start && array[j] >= array[end])
33                 --j;
34             if (i < j) {
35                 exchange(array, i, j);
36                 ++i;
37                 --j;
38             }
39         }
40 
41         if (i > j) {
42             exchange(array, i, end);
43             return i;
44         }
45         // i == j的两种情况
46         else if (array[i] > array[end]) {
47             exchange(array, i, end);
48             return i;
49         } else {
50             exchange(array, i + 1, end);
51             return i + 1;
52         }
53     }
54 
55     // 真正的随机快速排序算法要开始了
56     public void quickSort(int[] array, int start, int end) {
57         if (start < end) {
58             int middle = partition(array, start, end);
59             quickSort(array, start, middle - 1);
60             quickSort(array, middle + 1, end);
61         }
62     }
63 
64     @Test
65     public void test() {
66         int[] array = { 8, 2, -1, 4, 9, -5, 3, 6, 25, 5, 10, -3, 30, 21, 13 };
67         quickSort(array, 0, array.length - 1);
68         Array.print(array);
69     }
70 }

 

以上是关于随机快排算法的主要内容,如果未能解决你的问题,请参考以下文章

随机化快排和决策树

荷兰旗问题及随机快排和bfprt算法

随机选择算法

排序算法——快排思想

算法--快排

分治法之快排&随机化