容易算法

简单算法

二分查找 -- 百度百科:http://baike.baidu.com/view/610605.htm

 

public static int binarySearch(int[] target,int key){
  int low = 0;
  int high = target.length-1;
  
  while(low <= high){
   int middle = (low + high)/2;
   if(target[middle] == key)
    return middle;
   else if(target[middle] > key)
    high = middle-1;
   else
    low = middle+1;
  }
  return -1;
  
 }

 

 

快速排序 -- http://baike.baidu.com/view/115472.htm

 /**
     * 快速排序的O(nlogn)
     * @param target
     * @param start
     * @param end
     */
 public static void quickSort(int[] target, int start, int end) {
  int i, j, key;
  i = start;
  j = end;
  if (i < j) {

    key = target[start];
   // 从数组两端交替地向中间扫描  
   // 进行扫描的指针i,j;i从左边开始,j从右边开始  
   while (i < j) {
    while (target[j] >= key && i < j)
     j--;
    target[i] = target[j];// 比枢纽元素小的移动到左边   

    while (target[i] <= key && i < j)
     i++;
    target[j] = target[i];// 比枢纽元素大的移动到右边   
   }
   target[i] = key;// 枢纽元素移动到正确位置   
   quickSort(target, start, i - 1);// 前半个子表递归排序   
   quickSort(target, i + 1, end);// 后半个子表递归排序   
  }
 }

 

冒泡排序 -- http://baike.baidu.com/view/254413.htm

 

/**
  * 循环比较   比较交换O(n^2)
  * @param target
  */
 public static void bubbleSort(int[] target){
  int length = target.length;
  int temp = 0;
  for(int i=0;i<length-1;i++){
   for(int j=0;j<length-i-1;j++){
    if(target[j] > target[j+1]){
     temp = target[j+1];
     target[j+1] = target[j];
     target[j] = temp;
    }
   }
  }
 }

 

选择排序 -- http://baike.baidu.com/view/547263.htm

 

/**
  * 交换次数比冒泡排序少多了,由于交换所需CPU时间比比较所需的CPU时间多,
  * n值较小时,选择排序比冒泡排序快。
  * @param target
  */
 public static void choiseSort(int[] target){
  int length = target.length;
  int temp = 0;
  for(int i=0;i<length-1;i++){
   int pos = i;
   for(int j=i+1;j<length;j++){
    if(target[pos] > target[j]){
     pos = j;
    }
   }
   temp = target[pos];
   target[pos] = target[i];
   target[i] = temp;
  }
 }