排序算法(三) 快速排序

快速排序:较之前面俩稍微麻烦一些,选择一个关键值作为基准值。比基准值小的都在左边序列(一般是无序的),比基准值大的都在右边(一般是无序的)。一般选择序列的第一个元素。一次循环:从后往前比较,用基准值和最后一个值比较,如果比基准值小的交换位置,如果没有继续比较下一个,直到找到第一个比基准值小的值才交换。找到这个值之后,又从前往后开始比较,如果有比基准值大的,交换位置,如果没有继续比较下一个,直到找到第一个比基准值大的值才交换。直到从前往后的比较索引>从后往前比较的索引,结束第一次循环,此时,对于基准值来说,左右两边就是有序的了。接着分别比较左右两边的序列,重复上述的循环。

 1 public class Kuaisupaixu {
 2     /*
 3      * public static void sort(int[] a, int begin, int end) { int i, j, index;
 4      * if (begin >= end) // 可行性检查 return; i = begin; j = end; index = a[i];
 5      * 
 6      * while (i < j) { while (i < j && a[j] >= index) { j--; } if (i < j) {
 7      * a[i++] = a[j]; } while (i < j && a[i] < index) { i++; } if (i < j) {
 8      * a[j--] = a[i]; } } a[i] = index; sort(a, begin, i - 1); sort(a, i + 1,
 9      * end); }
10      * 
11      * public static void quickSort(int[] a) { sort(a, 0, a.length - 1); }
12      * 
13      * public static void main(String[] args) { int[] a = { 15, 2, 34, 10, 88,
14      * 71 }; quickSort(a); for (int i = 0; i < a.length; i++) {
15      * System.out.print(a[i] + " "); } }
16      */
17     public static void Ksort(int[] a, int begin, int end) {
18         int i, j, index;
19         if (begin > end) { // 可行性判断
20             return;
21         } else {
22             i = begin;
23             j = end;
24             index = a[i];
25         }
26 
27         while (i < j) {
28             while (i < j && a[j] >= index) { // 从后往前,要是比index大,那就往前面看
29                 j--;
30             }
31             if (i < j) { // 当a[j]<index的时候,,就将a[j]的值给a[i],然后i自增后变成i+1
32                 a[i++] = a[j];
33             }
34             while (i < j && a[i] < index) { // 从前往后看,要是比index小,那就继续往后看
35                 i++;
36             }
37             if (i < j) { // 当a[i]比index大时候,就将a[i]赋值给a[j],然后j--
38                 a[j--] = a[i];
39             }
40         }
41         a[i] = index; // 别忘了把index赋值给中间那个人
42         Ksort(a, begin, i - 1); // 开始递归咯
43         Ksort(a, i + 1, end);// 开始递归咯
44     }
45 
46     public static void Print(int[] a) {
47         Ksort(a, 0, a.length - 1);
48     }
49 
50     public static void main(String[] args) {
51         int[] a = { 2, 15, 11, 54, 23 };
52         Print(a);
53         for (int i = 0; i < a.length; i++) {
54             System.out.print(a[i] + " ");
55         }
56 
57     }
58 }

 

posted @ 2018-03-24 22:03  gaochao5kuba  阅读(79)  评论(0)    收藏  举报