2018-10-29 20:16:46


冒泡排序

例子(对数字排序):

假设有这样一组数字:32, 8, 128, 2, 64

现在对其进行冒泡排序(*表示下次比较的开始数字):

32>8? ture: 将32和8调换位置  8, 32*, 128, 2, 64;

32>128? false:保持原位置不动   8, 32, 128*, 2, 64;

128>2 ? true: 将128和2调换位置  8, 32, 2, 128*, 64;

128>64 ? true:将128和64调换位置  8, 32, 2, 64, 128*;

经过以上步骤,最大数128浮出水面。

现在找出剩余数字 8, 32, 2, 64 中的最大数:

8>32? false: 保持原位置不动 8, 32*, 2, 64;

32>2 ? ture: 将32和2调换位置  8, 2, 32*, 64;

32>64? false: 保持原位置不动   8, 2, 32, 64*;

经过以上步骤,最大数64浮出水面。

...

由此一步步比较,即可得到排序后的结果: 2, 8, 32, 64, 128

程序实现如下:

//形式参数intArr表示要排序的数组

     public static int[] bubbleSort(int[] intArr) {
         if (intArr == null)
             return null; // 当传进来的数组为null时返回null
         int len = intArr.length; // 定义len表示数组的长度
         if (len < 2)
             return intArr; // 当数组长度小于2时直接返回该数组,此时无需排序

         while (len > 1) {
             for (int i = 0; i < len - 1; i++) {
                 // if语句表示如果前一个数大于后一个数,则交换位置,否则什么也不做
                 if (intArr[i] > intArr[i + 1]) {
                     int temp = intArr[i];
                     intArr[i] = intArr[i + 1];
                     intArr[i + 1] = temp;
                 }
             }
             len -= 1; // 经过一个循环的比较,已经得出了本次循环的最大值,把它放在索引最大处,接下来比较除最大索引处之外的数的最大值,依次循环...
         }
         return intArr;
     }

二分查找

例子(对上述排序好的数字进行查找):

有如下排序好的数字:2, 8, 32, 64, 128

索引值分别为 0, 1, 2, 3, 4

如何查找数字 2 的索引呢?

取中间索引 2 处的值 32 , 32<2 ? false,说明数值2的索引在索引2的前面;

取索引0和索引2的中间索引值1,索引1处的值为8, 8<2 ? false,说明数值2的索引在索引1的前面;

...

依次取值比较即可得到数值2的索引为1;

程序实现如下:

参数表示在数组intArr中查找值value所在的索引

     public static int binarySearch(int value, int[] intArr) {
         int low = 0; // low表示最小索引
         int high = intArr.length - 1; // len表示最大索引

         while (high >= low) {
             // 0 1 2 3 4 5 中间索引指2;
             // 0 1 2 3 4 中间索引则为2
             int mid = (low+high) >>> 1; // mid表示len无符号右移一位,最高位补0,即除以2
             int midVal = intArr[mid]; // midVal表示数组中间索引处值

             if (midVal < value)
                 low = mid + 1;
             else if (midVal > value)
                 high = mid - 1;
             else
                 return mid; // 当要查找的值找到时返回其索引
         }
         return -1; // 当要查找的值未找到时返回-1
     }

Java:冒泡排序 | 二分查找的更多相关文章

  1. java 冒泡排序 二分查找 选择排序 插入排序

    下面这个程序是先定义一个整型数组,然后将其中的元素反序赋值,再用冒泡排序进行排序以后用二分查找来查找其中是否有某个数,返回值为-1时表示这个数可能小于这个数组的最小值或大小这个数组的最大值,-2表示这 ...

  2. 学习练习 Java冒泡排序 二分查找法

    冒泡排序: // 冒泡排序 /* System.out.println("请输入要排序的个数:"); Scanner v = new Scanner(System.in); int ...

  3. [19/03/13-星期三] 数组_二维数组&冒泡排序&二分查找

    一.二维数组 多维数组可以看成以数组为元素的数组.可以有二维.三维.甚至更多维数组,但是实际开发中用的非常少.最多到二维数组(我们一般使用容器代替,二维数组用的都很少). [代码示例] import ...

  4. Java实现二分查找算法

    Java程序员总该玩点基本的算法. 1.前提:二分查找的前提是需要查找的数组必须是已排序的,我们这里的实现默认为升序 2.原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位置的那个值)前,中 ...

  5. 【15】-java实现二分查找

    二分查找在面试中经常被遇到,这个方法十分优雅 介绍 二分查找可以解决(预排序数组的查找)问题:只要数组中包含T(即要查找的值),那么通过不断缩小包含T的范围,最终就可以找到它.一开始,范围覆盖整个数组 ...

  6. 手把手教你用java实现二分查找树及其相关操作

    二分查找树(Binary Search Tree)的基本操作有搜索.求最大值.求最小值.求前继.求后继.插入及删除. 对二分查找树的进行基本操作所花费的时间与树的高度成比例.例如有n个节点的完全二叉树 ...

  7. java实现二分查找

    /** * 二分查找 * @param a * @param n * @param value * @return * @date 2016-10-8 * @author shaobn */ publ ...

  8. java 实现二分查找法

    /** * 二分查找又称折半查找,它是一种效率较高的查找方法. [二分查找要求]:1.必须采用顺序存储结构 2.必须按关键字大小有序排列. * @author Administrator * */ p ...

  9. Java算法 -- 二分查找

    折半查找,要求待查找的序列有序.每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程.直到 ...

随机推荐

  1. Flask中的ThreadLocal本地线程,上下文管理

    先说一下和flask没有关系的: 我们都知道线程是由进程创建出来的,CPU实际执行的也是线程,那么线程其实是没有自己独有的内存空间的,所有的线程共享进程的资源和空间,共享就会有冲突,对于多线程对同一块 ...

  2. STM32: TIMER门控模式控制PWM输出长度

    搞了两天单脉冲没搞定,无意中发现,这个利用主从模式的门控方式来控制一路PWM的输出长度很有效. //TIM2 PWM输出,由TIM4来控制其输出与停止 //frequency_tim2:TIM2 PW ...

  3. codevs1183 泥泞的道路(01分数规划)

    1183 泥泞的道路  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description CS有n个小区,并且任意小区之间都有两 ...

  4. 慕课网6-4 编程练习:jQuery选择器中的过滤器

    6-4 编程练习 结合所学的jQuery过滤器知识,实现如下图所示的隔行换色效果 任务 使用jQuery的.css()方法设置样式,语法css('属性 '属性值') 使用:odd和:even过滤器实现 ...

  5. Pycharm初始创建项目和环境搭建(解决aconda库文件引入不全等问题)

    1.新建工程 1.选择新建一个Pure Python项目,新建项目路径可以在Location处选择. 2.Project Interpreter部分是选择新建项目所依赖的python库,第一个选项会在 ...

  6. vs2017 + miniUI + dapper 添加、修改、删除、查询操作

    A.数据库表引用先前建立的company 公司信息表. B.建立文件: views > Home > Company.cshtml(新建文件) ,代码如下(直接复制即可) @{ Layou ...

  7. D. Vasya And The Matrix(Educational Codeforces Round 48)

    D. Vasya And The Matrix time limit per test2 seconds memory limit per test256 megabytes inputstandar ...

  8. 网络爬虫之scrapy框架(CrawlSpider)

    一.简介 CrawlSpider其实是Spider的一个子类,除了继承到Spider的特性和功能之外,还派生了其自己独有的更强大的特性和功能.其中最显著的功能就是"LinkExtractor ...

  9. Spring加载applicationContext.xml实现spring容器管理的单例模式

    package com.etc.pojo; import org.springframework.context.ApplicationContext; import org.springframew ...

  10. 03—AOP基本配置