A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王哲zhe 中级黑马   /  2015-8-22 23:22  /  147 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.util.Arrays;

/*
*已知int[] arr = {37, 92, 54, 18, 76};
*如何判断92是否存在?
*/
public class BinarySearch {
        public static void main(String[] args) {
                int[] arr = { 37, 92, 54, 18, 76 };
                // 对数字排序
                sort(arr);
                // 输出排序后的字符串
                System.out.println(Arrays.toString(arr));
                // 二分法查找
                System.out.println(search(arr, 37));

        }

        // 排序方法
        public static void sort(int[] arr) {
                for (int x = 0; x < arr.length - 1; x++) {
                        for (int y = 0; y < arr.length - 1 - x; y++) {
                                if (arr[y] > arr[y + 1]) {
                                        arr[y] = arr[y] ^ arr[y + 1];
                                        arr[y + 1] = arr[y] ^ arr[y + 1];
                                        arr[y] = arr[y] ^ arr[y + 1];
                                }
                        }
                }
        }

        // 二分法查找方法
        public static int search(int[] arr, int key) {
                int start = 0;
                int end = arr.length - 1;
                int mid = (start + end) / 2;
                while (arr[mid] != key) {       
                        if (arr[mid] > key) {
                                end = mid - 1;
                        } else if (arr[mid] < key) {
                                start = mid + 1;
                        }
                        if (start > end) {
                                return -1;
                               
                               
                        }
                        mid = (start + end) / 2;
                }
                return mid;
        }
        /*public static int search(int[] arr, int key) {
                // 定义开始、中间、结尾
                int start = 0;
                int end = arr.length - 1;
                int mid = (start + end) / 2;

                // key 与 arr[mid]比较
                while (arr[mid] != key) {
                        if (arr[mid] > key) {
                                end = mid - 1;
                        } else if (arr[mid] < key) {
                                start = mid + 1;
                        }
                        if (start > end) {
                                return -1;
                        }
                        mid = (start + end) / 2;
                }
                return mid;
        }*/
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马