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; 

原文地址:https://www.cnblogs.com/bjanzhuo/p/3576008.html