zoukankan      html  css  js  c++  java
  • java排序

    纯粹个人的笔记,看到hadoop中的quickSort和headSort,发现原来的好东西都付之东流了,在此记一下下

    ------------------------------------

    冒泡  

      一种实现可以:for 向后 for 内部向前

      for(out = nElens-1;out>0;out--)

         for(int i=0;i<out;i++)

              if(a[i]>a[out])swap();

    --------------------------------------

    选择   冒泡的变形,使用标志,而不是替换,在内部结束时进行替换

      一种实现可以:for 向前 for 内部向前

       for(out=0;n<nElens-1;out++)

          min = out;

          for(int i=0;i<n;i++)

              if(a[min]>a[i])min = i;

          swap()

    --------------------------------------

    插入   跟前边有序列比较,找到合适的位置,进行错位

    for(int out = 1; n< nElens; out++)

       item = a[out];

       int in = out;

       while(in > 0 && a[in] > item)

            a[out] = a[out-1];in--;

       a[in] = item;

    --------------------------------------

    希尔 插入排序的改变,先进行分组,组内进行插入排序,知道分组数为1为止

            int j;  

            for(int gap = data.length / 2; gap > 0; gap /= 2){  

                for(int i = gap; i < data.length; i++){  

                    Comparable temp = data[i];  

                    for(j = i; j >= gap && temp.compareTo(data[j - gap]) < 0; j -= gap){  

                        data[j] = data[j - gap];  

                    }  

                    data[j] = temp;  

                }  

            }  

    --------------------------------------

    转: http://blog.csdn.net/forrestgtju/article/details/7848829

    快速   分区,递归在分区,每次分区确定一个基数位置,并将队列分两半

             分区算法的一种实现:设left为基数位置,想跟right比较,再跟left比较,当left>=right,结束,并将基数放在left上int AdjustArray(int s[], int l, int r) //返回调整后基准数的位置  

    Java代码 复制代码 收藏代码
    1. {     
    2.     int i = l, j = r;     
    3.     int x = s[l]; //s[l]即s[i]就是第一个坑     
    4.     while (i < j)     
    5.     {     
    6.         // 从右向左找小于x的数来填s[i]     
    7.         while(i < j && s[j] >= x)      
    8.             j--;       
    9.         if(i < j)      
    10.         {     
    11.             s[i] = s[j]; //将s[j]填到s[i]中,s[j]就形成了一个新的坑     
    12.             i++;     
    13.         }     
    14.      
    15.         // 从左向右找大于或等于x的数来填s[j]     
    16.         while(i < j && s[i] < x)     
    17.             i++;       
    18.         if(i < j)      
    19.         {     
    20.             s[j] = s[i]; //将s[i]填到s[j]中,s[i]就形成了一个新的坑     
    21.             j--;     
    22.         }     
    23.     }     
    24.     //退出时,i等于j。将x填到这个坑中。     
    25.     s[i] = x;     
    26.      
    27.     return i;     
    28. }   

    另一种实现快速排序,其实理论上都一样:

                 int left = i; 

  • 相关阅读:
    数据同步
    闭包的内存泄漏解决办法
    No module named 'MySQLdb'
    pqi 更换pip 国内源
    BZOJ 1934 [Shoi2007]Vote 善意的投票
    BZOJ 2038 [2009国家集训队]小Z的袜子(hose)
    BZOJ 1002 [FJOI2007]轮状病毒
    BZOJ 3442 学习小组
    BZOJ 3261 最大异或和
    BZOJ 4029 [HEOI2015]定价
  • 原文地址:https://www.cnblogs.com/bjanzhuo/p/3576008.html
Copyright © 2011-2022 走看看