zoukankan      html  css  js  c++  java
  • 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

    《啊哈!算法》

  • 相关阅读:
    本地blast用法
    linux挂载移动硬盘
    酶设计软件rosetta安装
    redhat 6.7 安装nvidia显卡驱动时出现的问题
    分子模拟软件Schrodinger Suites 2015安装
    Python_二维数组
    Python_递归
    Python_装饰器
    Python_生成器generator
    Python_迭代器
  • 原文地址:https://www.cnblogs.com/mingziday/p/4557620.html
Copyright © 2011-2022 走看看