java惯用排序算法

java常用排序算法

一  顺序查找 
     
    前提条件:无 
    从所传入集合的一段开始,顺序扫描,并以此将扫描到的值与所传如德key值进行比较。若有值与其相等,则表明查找成功;若扫描结束后仍没有值与key值相等,则表明查找失败。 
   
    示例代码: 
    public int SeqSearch(int[] r, int k){   
       // 在顺序表R[0..n]中顺序查找关键字为k的结点, 
        // 成功时返回找到的结点位置,失败时返回0 
        for(int i = r.length - 1; i >= 0; i--) //从表后往前找 
        { 
            if(r[i] == k) 
            { 
                return i;  //若i为-1,表示查找失败,否则R[i]是要找的结点 
            } 
        } 
        return -1; 
    } 
    缺点:执行效率低 
    优点:实现方式简单,比较容易好理解,对集合的数据结构没什么要求 


二  二分查找 
    
    前提条件:集合有序排列(递增、递减) 
   1  确定查找范围,获取该区间的中间位置:middle=(low+high)/2 
   2  然后将待查的K值与R[mid]比较:若相等,则查找成功并返回此位置,否则须确 
       定新的查找区间,继续二分查找。 
       ① 若R[mid] > K,则由数组的有序性可知R[mid..n]均大于K,因此该结点必定是 
           在位置mid左边的R[0..mid-1]中 
       ② 若R[mid] < K,则要查找的K必在mid的右边的R[mid+1..n]中,下一次查找是 
           针对新的查找区间进行的。 
   3  因此,从初始的查找区间R[1..n]开始,每经过一次与当前查找区间的中点位置上的 
       结点关键字的比较,就可确定查找是否成功,不成功则当前的查找区间就缩小一半。 
       这一过程重复直至找到关键字为K的结点,或者直至当前的查找区间为空(即查找失 
       败)时为止。 
       
       示例代码: 
       
       public  int  dichotomyMethod(int[] arrys,int keyValue){ 
          
          int middle; 
          int low=0; 
          int high=arrys.length-1; 
          while(low<=high){ 
              middle=(low+high)/2 
              if(arrys[middle]==keyValue){ 
                  return middle; 
              }else if(arrys[middle]<keyValue){ 
                  low=middle+1;              
              }else{ 
                   high=middle-1; 
              } 
          } 
          return -1; 
      }