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; } }