經典算法-選擇排序,冒泡排序,二分查找

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

}
相關文章
相關標籤/搜索