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.youkuaiyun.com/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 i = l, j = r;  
    int x = s[l]; //s[l]即s[i]就是第一个坑  
    while (i < j)  
    {  
        // 从右向左找小于x的数来填s[i]  
        while(i < j && s[j] >= x)   
            j--;    
        if(i < j)   
        {  
            s[i] = s[j]; //将s[j]填到s[i]中,s[j]就形成了一个新的坑  
            i++;  
        }  
  
        // 从左向右找大于或等于x的数来填s[j]  
        while(i < j && s[i] < x)  
            i++;    
        if(i < j)   
        {  
            s[j] = s[i]; //将s[i]填到s[j]中,s[i]就形成了一个新的坑  
            j--;  
        }  
    }  
    //退出时,i等于j。将x填到这个坑中。  
    s[i] = x;  
  
    return i;  
} 

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

             int left = i; 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值