import java.util.Arrays; /** * Created by zhangyue on 16/8/12. * 测试-算法练习 * 参考网址: * http://www.csdn.net/article/2014-04-10/2819237-Top-10-Algorithms-for-Coding-Interview */ public class AlgorithmTest { public static void main(String[] args) { int a[] = {9,4,3,6,1,8}; System.out.println(Arrays.toString(selectSort(a))); int b[] = {9,4,3,6,1,8}; System.out.println(Arrays.toString(bubbleSort(b))); int c[] = {2,3,6,12,23,45,46,77,79,100,123,146,150}; System.out.println(binSearch(c,3)); } //1.选择排序-相邻的比较,小的放在左边。时间复杂度n-1 public static int[] selectSort(int[] arr){ for(int i = 0;i<arr.length-1;i++){ for(int j=i+1;j<arr.length;j++){ int temp = arr[i]; if(temp>arr[j]){ arr[i]=arr[j];//小的放在前面 arr[j]=temp; } } } return arr; } //2.冒泡排序,最小的放在上面,提取一个最小的,二次循环就少一个 public static int[] bubbleSort(int[] arr){ for(int i = 0;i<arr.length-1;i++){ for(int j=0;j<arr.length-1-i;j++){ if(arr[j]>arr[j+1]){ int temp=arr[j]; arr[j]=arr[j+1];//小的放在前面 arr[j+1]=temp; } } } return arr; } //3.二分查找算法-非递归算法-while循环 public static int binSearch(int[] arr,int key){ int low = arr[0]; int hight = arr[arr.length-1]; //每次判断以后,low和height的值就会从新变化 while(low<=hight){ int middle = low + ((hight-low)>>1);//带符号右移1位,至关于除以2 if(key==middle){ return middle; }else if(key < middle){ //low不变 hight = middle-1; }else{ low = middle+1; } } return -1; } }