Java排序算法

1、桶排序:思路简单,占用空间大,就是把数字本身作为数组的下表,然后顺序输出即可

2、冒泡排序:运算量大

    /**
     * 冒泡,或者叫下沉
     * @param array
     */
    public  void MaopaoSort(int[] array , int num)/*入参:数组本身和数组大小*/
    {
        for(int i=0; i<num; i++)
        {
            for(int j=0; j<(num-2-i); j++) //排过一轮之后最后最后一个数字变成了最大的
            {
                if(array[j]>array[j+1])
                {
                    array[j]=array[j]+array[j+1]; //可以不用第三个变量进行swap的方法
            array[j+1]=a[j]-array[j+1];
            array[j]=a[j]-array[j+1]; } } } } 

3、快速排序  

 1     /**
 2      * 快速排序
 3      * @param args
 4      */
 5     public void quickSort(int[] array, int left, int right)
 6     {
 7         if(lef t>= right)//无须再比
 8         {
 9              return;
10         }
11         
12         int tmp = array[left];//先取出一个临时值作为分界标识
13         int i = left;
14         int j = right;
15         
16         while(i<j)
17         {
18             while(i<j && array[j] >= tmp) //从右侧开始向中间靠近
19             {
20                 j--;
21             }
22             if(i<j)//找到比分界值小的元素
23             {
24                 a[i] = a[j];//不要担心被覆盖,因为a[i]已经被保存起来了
25                 i++;
26             }
27             
28             while(i<j && a[i] <= tmp)//从左侧开始向中间靠近
29             {
30                 i++;
31             }
32             if(i<j)//找到比分界值大的元素
33             {
34                 a[j] = a[i];
35                 j--;
36             }
37          }//一轮排序完成,分成两组,左边的组都比tmp值小,右边的组都比tmp大  
38          a[i] = tmp;//新的分界值
39          quickSort(array,i+1,right);//这个从新排序的分界开始还不是很明白
40          quickSort(array,left,j-1);
41 42         
43     }
44     /**
45      * 快速排序非递归版本,这个版本我理解得不好
46      * @param args
47      */
48     public <T  extends Comparable<T>> void quickSort2(List<T> array,int left,int right)
49     {
50         Num num = new Num(left,right);
51         LinkedList<Num> link = new LinkedList<Num>();
52         link.addLast(num);
53         
54         while(!link.isEmpty())
55         {
56             Num tmpnum = link.removeFirst();
57             int i = tmpnum.l;
58             int j = tmpnum.r;
59             if(i>=j)
60             {
61                 continue ;
62             }
63             int l = i;
64             int r = j;
65             T tmp = array.get(i);
66             
67             while(i<j)
68             {
69                 while(i<j && array.get(j).compareTo(tmp) >= 0)
70                 {
71                     j--;
72                 }
73                 if(i<j)
74                 {
75                     array.set(i, array.get(j));
76                     i++;
77                 }
78                 
79                 while(i<j && array.get(i).compareTo(tmp) <= 0)
80                 {
81                     i++;
82                 }
83                 if(i<j)
84                 {
85                     array.set(j,array.get(i));
86                     j--;
87                 }
88                 
89             }
90             array.set(i, tmp);
91             link.addLast(new Num(i+1,r));
92             link.addLast(new Num(l,j-1));    
93         }        
94  }

参考:

http://blog.csdn.net/morewindows/article/category/859207

《啊哈!算法》