Java之二分查找-yellowcong
来源:互联网 发布:三一重工大数据平台 编辑:程序博客网 时间:2024/06/05 21:58
二分查找,是用来处理有序的数组的,其时间复杂度为 O(logN) ,二分查找的方式有两种,一种是通过while循环来实现,另一种是通过递归的方式来实现,其中原理也挺简单,就是判断中间数和需要查找的数大小关系,如果小,就增加地位数,如果大,就减少高位数,保证范围不断缩小。
代码
在面试过程中,我们需要掌握冒泡排序,选择排序,快速排序,以及二分法,还有一些数据的链表(单项,双向),Tree,BTree,红黑树等数据结构。
package com.yellowcong.controller;public class Demo3 { public static void main(String[] args) { int[] array = new int[] { 12, 123, 132, 13, 13, 1, 32, 3, 13, 12, 31, 23, 13, 1, 31, 3, 13, 3213, 13, 131, 31, 313131 }; System.out.println(array.length); // 快速排序的方法 // quickSort(array,0,array.length-1); // 冒泡排序 bubbleSort(array); //快速排序 quickSort(array, 0, array.length-1); StringBuffer sb = new StringBuffer(); for (int val : array) { sb.append(val + ","); } System.out.println(sb.toString()); //二分查找 int index = biSearch(array,31,0,array.length-1); System.out.println(index); index = biSearchLast(array,31); System.out.println(index); } /** * 查找最后一次出现的位置 * @param array * @param data * @return */ private static int biSearchLast(int [] array,int data){ int low = 0; int high = array.length - 1; int middle ; while(low < high){ middle = (low +high)/2; //数据大于灯具中间数的情况,就表示,数据不在低位的前一部分 if(array[middle] <= data ){ low=middle; }else{ //当数据比中间数小的情况 ,就表示在高位了 high = middle -1 ; } } if(array[low] == data){ return low; }else{ return -1 ; } } /** * 通过递归的方式来进二分查找 * @param array 数据 * @param data 数组 * @param low 低位 * @param high 高位 * @return */ public static int biSearch(int[] array,int data ,int low,int high) { if(low <= high){ int middle = (low+high)/2; if(array[middle] == data){ return middle; }else if(array[middle] <data ){ low ++; return biSearch(array,data ,low,high); }else if(array[middle] >data){ high--; return biSearch(array,data,low,high); } } return -1; } /** * 二分查找 * 这个是通过while的方式 * @param array * @param data * 需要查找的字符 */ private static int biSearch(int[] array, int data) { int middle ; int low = 0; int high = array.length -1; while(low <high){ middle = (high+low)/2; if(data == array[middle]){ return middle; }else if(data > array[middle]){ low ++ ; }else if(data <array[middle]){ high -- ; } } // - 1表示没有找到的情况 return -1 ; } /** * 选择排序 * * @param array */ private static void selectSort(int[] array) { for (int i = 0; i < array.length - 1; i++) { for (int j = i + 1; j < array.length; j++) { if (array[i] > array[j]) { int tmp = array[i]; array[i] = array[j]; array[j] = tmp; } } } } /** * 冒泡排序 * * @param array */ private static void bubbleSort(int[] array) { for (int i = 0; i < array.length - 1; i++) { for (int j = 0; j < array.length - i - 1; j++) { if (array[j] > array[j + 1]) { int tmp = array[j]; array[j] = array[j + 1]; array[j + 1] = tmp; } } } } private static int getMiddle(int[] data, int low, int high) { int tmp = data[low]; while (low < high) { while (low < high && data[high] >= tmp) { high--; } data[low] = data[high]; while (low < high && data[low] <= tmp) { low++; } data[high] = data[low]; } data[low] = tmp; return low; } /** * 快速排序 * @param data 数组 * @param low 开始 * @param high 结束 */ private static void quickSort(int[] data, int low, int high) { if (low < high) { int middle = getMiddle(data, low, high); quickSort(data, low, middle - 1); quickSort(data, middle + 1, high); } }}
阅读全文
0 0
- Java之二分查找-yellowcong
- 二分查找之java
- java之二分查找
- 二分查找之Java实现
- 二分查找之Java实现
- java 之 二分查找实现
- java算法之二分查找
- Java-算法之二分查找
- 二分查找之java实现
- java递归之--二分查找
- java算法之二分查找
- 二分查找之Java实现
- java基础查找之二分查找
- JAVA常用查找之二分查找法
- CentOS之Java安装-yellowcong
- Java之数字格式化-yellowcong
- Java之颜色工具-yellowcong
- Java之二维码工具包-yellowcong
- 虚拟机centos7NAT网络连接不了的处理方法
- c语言实现插入排序
- 我的学习记录35
- 语义分割网络之PSPnet
- 从菜鸟到Android资深工程师的进阶之路
- Java之二分查找-yellowcong
- Activity详解
- C++语法之继承
- main函数参数
- Boolean对象
- 一、Linux 概述
- 简单搭建Spring Hello
- 提高javascript性能的68个技巧(1)
- AndroidStudio使用jni