经典算法-选择排序,冒泡排序,二分查找
经典算法-选择排序,冒泡排序,二分查找
指尖Coding 发表于1年前
经典算法-选择排序,冒泡排序,二分查找
  • 发表于 1年前
  • 阅读 4
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

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

}

 

共有 人打赏支持
粉丝 2
博文 50
码字总数 36954
×
指尖Coding
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: