简单的实现快速排序(适合小白入门)


 1 /*
 2     此篇博文适用于像我一样的小白;
 3     首先,你要大概了了解快排的基本原理;
 4     快排的实现有网上很多种,我自认为下面这种相对好理解的;
 5     废话不多说,上代码;
 6     注:下面的实现对数组元素升序的快速排序方法;
 7 
 8 */
 9 class QuickSort {
10     public static void main(String[] args) {
11         int[] a = {1, 8, 5, 9, 0, 2};
12         
13         int start = 0;
14         int end = a.length - 1;
15         quickSort(a, start, end);//应用快速排序方法 
16         
17         //显示排序后的数组 
18         for(int i: a) {
19             System.out.println(i);
20         }    
21     }
22     
23     /**快速排序方法*/ 
24     /**a:要排序的数组
25      * start:这里选取的是第一个数,这里是索引号,始终拿这个数和其他数比较,
26      * end;最后一个元素,这里是索引号;
27      */
28     public static void quickSort(int[] a, int start, int end) {
29         //flag表示快排时游标移动的方向;若为false表“左->右”,若为true表“右->左”;
30         boolean flag = true;  
31         int i = start;
32         int j = end;
33         
34         if(i >= j) { // 判断是否到中间了,这也是递归的结束条件;
35             return ;
36         }
37         
38         while(i != j) {
39             //若是前面的数大于后面的数,那么两个数就交换;
40             if(a[i] > a[j]) {
41                 int t = a[i];
42                 a[i] = a[j];
43                 a[j] = t;
44                 //只有经过数的交换后,才能把游标移动的方向改变;
45                 flag = !flag;
46             }
47             //根据flag的值决定下标移动,还是上标移动 ,使游标更改走下一个数据;
48             if(flag) 
49                 j--;
50             else
51                 i++;
52         }
53         //上面的循环结束后,i和j都指向同一位置;要进行下一次的排序,就要将i,j分别移向两边;
54         i--;
55          j++;
56       //通过递归实现整体的快速排序;
57         quickSort(a, start, i);
58         quickSort(a, j, end);
59     }
60 }

 

 

 

posted @ 2016-04-15 18:46  简笔话_Golden  阅读(1005)  评论(0编辑  收藏  举报