现在我来简单叙述一下二分法排序的思想,在插入第i个元素时,对前面的0~i-1元素进行折半,先跟他们中间的那个元素比,如果小,则对前半再进行折半,否则对后半进行折半,直到left>right,然后再把第i个元素前1位与目标位置之间的所有元素后移,再把第i个元素放在目标位置上。

实际上我们看到,这是用一种方式来查找最合适的数值应该插入的位置。这个和快速排序有些相像之处但是也不完全相同。它实际上也是通过折半查找找到每个元素应该存放的位置。

下面我将根据我的代码来具体解释一下。

/*** 二分法排序<br>* 根据排序原则,每次我们都是在一个有序序列中插入一个新的数字<br>* 那么我们可以将这个有序序列进行二分。<br>* 左游标left为0,右游标right为i-1(i是这个数字在原数组中的位置)<br>* middle初始为。<br>* 当left<=right时<br>* middle是left和right的中值。<br>* 我们作如下操作。如果array[i]的值比array[middle]值大。<br>* 那么我们就移动左游标令值为middle+1<br>* 负责就移动右游标为middle-1<br>* 移动完成后,我们需要将i-1到left之间的值进行依次向后移动给array[i]空出一个位置然后将array[i]插入* <p style="color:red">时间复杂度n</p>*/
public int[] binaryInsertSort(int[] array){for(int i = 0;i<array.length;i++){int temp = array[i];//待插入到前面有序序列的值int left = 0;//有序序列的左侧int right = i-1;//有序序列的右侧int middle = 0;//有序序列的中间while(left <= right){middle = (left + right)/2;//赋值if(temp<array[middle]){right = middle-1;}else{left = middle + 1;}}for(int j = i-1;j>=left;j--){//从i-1到left依次向后移动一位,等待temp值插入array[j+1] = array[j];}if(left != i ){array[left] = temp;}}return array;
}

首先我们看到,我们需要left 和 right 的值。将left的值设置为0,right的值设置为查找的位置的前一个(i-1)。

首先确定中间值middle = (left+right)/2.如果这个值比目标值大,则从右侧开始去查找。令left = middle+1;

否则令right = middle -1 ; 这个地方需要说明一下, i是不断递增的,所以每次插入的新数字都是在一个已经排好序列的数组中进行的。如果查到合适的位置,就令然后再把第i个元素前1位与目标位置(left)之间的所有元素后移,再把第i个元素放在目标位置上。

if(left != i ){array[left] = temp;}

这个是为了让目标位置的值赋值为temp(目标值)

算法排序----二分排序法相关推荐

  1. 【经典排序算法】二分查找法 (动图演示 + C 语言代码实现)

    [经典排序算法]二分查找法 (动图演示 + C 语言代码实现)   

  2. javascript数据结构与算法---检索算法(二分查找法、计算重复次数)

    javascript数据结构与算法---检索算法(二分查找法.计算重复次数) /*只需要查找元素是否存在数组,可以先将数组排序,再使用二分查找法*/ function qSort(arr){if (a ...

  3. java二分查找法_java算法之二分查找法的实例详解

    java算法之二分查找法的实例详解 原理 假定查找范围为一个有序数组(如升序排列),要从中查找某一元素,如果该元素在此数组中,则返回其索引,否则返回-1.通过数组长度可取出中间位置元素的索引,将其值与 ...

  4. 经典算法之二分查找法(俗称基本二分搜索法)

    经典算法之二分查找法(俗称二分搜索法) 文章目录 经典算法之二分查找法(俗称二分搜索法) 前言 一.什么是二分查找法? 二.代码实现 总结 前言 就算法而言,我们主要学习的是数学+思维+逻辑+数据结构 ...

  5. 每天5分钟玩转python3算法:二分查找法

    从今天开始,博主准备开始一段常见算法的学习,算法实现使用Python3,希望坚持下去^_^ alg1:二分查找法 1.运行时间 二分查找相比于依次查找,查询速度提升明显: + 依次查找:O(n) + ...

  6. java算法2_二分查找法

    比如现在有个记录名单的字典,里面的名字是按A-Z的顺序排好的,现在我想找Lily这个人.我可以从第一页开始一页一页的翻,但显然这样效率太低了.我可以怎么做呢?首先我直接翻到字典的中间位置,假如发现这里 ...

  7. 【javascript算法】二分查找法

    目录 1.二分查找算法 1.1定义 1.2流程图 1.3查找过程 2.javascript的实现 2.1 源码 2.2测试结果 2.3拓展题 1.二分查找算法 本文是根据有序数组升序的顺序来实现的 1 ...

  8. 【算法】二分答案法--暴力搜索答案方法

    1,例子 浅谈二分答案 2,解析 二分答案法.三分法 3,

  9. 数据结构与算法之二分查找法

    public static void main(String[] args) {         //目标数组         int[] arr = new int[] {1,2,3,4,5,6,7 ...

  10. 查找算法:二分查找、顺序查找

    08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活.此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/de ...

最新文章

  1. DFS 之 poj 2386 Lake Counting
  2. Apache 与 Nginx
  3. ofstream写文件
  4. jquery的$F()函数
  5. 单独使用 laydate 日期时间组件
  6. oppo 手机侧滑快捷菜单_OPPO刚秀出卷轴屏手机,就被打了一记响亮的“耳光”
  7. 3.19PMP试题每日一题
  8. netcore 编译 html,Asp.Net Core中的@ Html.Action
  9. mac使用的正确操作与注意事项(人体工程学)
  10. 一天一个Java基础——序列化
  11. Android异步载入全解析之开篇瞎扯淡
  12. Linux内核入门(二)——用户态向内核态切换
  13. 1000款商务通用PPT模板免费下载
  14. 数据库连接池详解:原理+常用连接池
  15. 深入浅出曲面的切平面方程和曲面的法线方程
  16. Jenkins用户权限
  17. try(){}的简单理解
  18. 安装CAD缺少html,Win10系统安装CAD2007失败缺少.NET组件如何解决
  19. 周转时间 平均周转时间 带权周转时间 平均带权周转时间
  20. GIS地理信息科学专业有哪些高校可以选择?

热门文章

  1. vscode占用C盘空间迁移到其他盘
  2. R语言文本聚类实例——以《金庸全集》为例
  3. FPGA实现BP神经网络-原理
  4. 雷神开机logo更改_Win10系统怎样更改开机logo
  5. HP电脑的增霸卡功能操作详解
  6. c语言c99标准,C语言 1999年标准 (C99)
  7. 固高运动控制卡的使用 2 关于IO的访问以及调用(C#版)
  8. 企业运行助推器——力软工作流引擎
  9. Ubuntu18.04安装中文字体SimHei
  10. 从AppCompat切换到MaterialComponents一些主题属性介绍