1、冒泡排序

public class BubbleSort{  
      public static void main(String[] args){  
          int score[] = {67, 69, 75, 87, 89, 90, 99, 100};  
          for (int i = 0; i < score.length -1; i++){    //最多做n-1趟排序  
              for(int j = 0 ;j < score.length - i - 1; j++){    //对当前无序区间score[0......length-i-1]进行排序(j的范围很关键,这个范围是在逐步缩小的)  
                  if(score[j] < score[j + 1]){    //把小的值交换到后面  
                      int temp = score[j];  
                      score[j] = score[j + 1];  
                      score[j + 1] = temp;  
                  }  
              }              
              System.out.print("第" + (i + 1) + "次排序结果:");  
              for(int a = 0; a < score.length; a++){  
                  System.out.print(score[a] + "\t");  
              }  
              System.out.println("");  
          }  
              System.out.print("最终排序结果:");  
              for(int a = 0; a < score.length; a++){  
                  System.out.print(score[a] + "\t");  
         }  
      }  
  } 

2、折半查找

public class BinarySearch { 
    /** 
    * 二分查找算法 
    * 
    * @param srcArray 有序数组 
    * @param key 查找元素 
    * @return key的数组下标,没找到返回-1 
    */  
    public static void main(String[] args) { 
        int srcArray[] = {3,5,11,17,21,23,28,30,32,50,64,78,81,95,101};   
        System.out.println(binSearch(srcArray, 0, srcArray.length - 1, 81));  
    } 
     
    // 二分查找递归实现   
    public static int binSearch(int srcArray[], int start, int end, int key) {   
        int mid = (end - start) / 2 + start;   
        if (srcArray[mid] == key) {   
            return mid;   
        }   
        if (start >= end) {   
            return -1;   
        } else if (key > srcArray[mid]) {   
            return binSearch(srcArray, mid + 1, end, key);   
        } else if (key < srcArray[mid]) {   
            return binSearch(srcArray, start, mid - 1, key);   
        }   
        return -1;   
    } 
     
    // 二分查找普通循环实现   
    public static int binSearch(int srcArray[], int key) {   
        int mid = srcArray.length / 2;   
        if (key == srcArray[mid]) {   
            return mid;   
        }   
  
        int start = 0;   
        int end = srcArray.length - 1;   
        while (start <= end) {   
            mid = (end - start) / 2 + start;   
            if (key < srcArray[mid]) {   
               end = mid - 1;   
            } else if (key > srcArray[mid]) {   
                start = mid + 1;   
            } else {   
                return mid;   
            }   
        }   
        return -1;   
    } 
} 

计算中间位置使用:

int mid = (end - start) / 2 + start; 

防止加法运算时可能导致的整数越界

 posted on 2016-08-02 12:12  布鲁布鲁sky  阅读(357)  评论(0编辑  收藏  举报