《java数据结构与算法》系列之“快速排序"

部门没人了,公司动作好快。。。算了,不想了!还是学知识吧,只有它不会让自己失望。

继续我的算法学习,快速排序是应用很广的算法,看了一早上才看懂些,感觉比冒泡之类的难理解,可能主要是递归那块自己不是很理解。

 1 public class QuickSort {
 2     public static void main(String[] args) {
 3         //int a [] = {49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23};
 4         int a [] = {34,15,35,36,25,53,51} ;//初始数组
 5         //原理:选一个数,开头或结尾的数字,然后和剩下的数依次比较,
 6         // 比较一轮之后,比其大的放一边,比其小的放一边,然后依次对两边分别进行递归。
 7         QuickSort quickSort=new QuickSort();
 8         quickSort.isEmptyArray(a);
 9         for (int i=0;i<a.length;i++){
10             System.out.print(a[i]+",");
11         }
12 
13     }
14     //拿到基准数字的位置
15     public int getMiddleNum(int[] a,int low,int high){
16         int basic=a[low];//数组的第一个作为比较数字
17         while (low<high){ //如果low>=high时,说明已经是最后一轮了
18             while (low<high && a[high]>=basic){
19                 high--;
20             }
21             a[low]=a[high];//比基准小的移动到底端
22             while (low<high && a[low]<= basic){
23                 low++;
24             }
25             a[high]=a[low];//比基准大的移动到高端
26         }
27         a[low]=basic;//基准记录到尾部
28         return  low; //返回基准的位置
29     }
30     //排序
31     public void sort(int[] a ,int low,int high){
32         if(low<high){
33             int middle=getMiddleNum(a,low,high); //得到基准数字的位置(关键)
34             sort(a,low,middle-1);  //对小于基准数字的进行递归
35             sort(a,middle+1,high); //对大于基准数字的进行递归
36         }
37     }
38     //判断数字是否为为空
39     public void isEmptyArray(int[] a){
40         if (a.length>0){
41             sort(a,0,a.length-1);
42         }
43     }
44 }

 

 

posted @ 2013-10-17 13:20  歌颂者  阅读(597)  评论(0编辑  收藏  举报