1.什么是二分排序:

二分排序是指利用二分法的思想对插入排序进行改进的一种插入排序算法,不同于二叉排序,可以利用数组的特点快速定位指定索引的元素;

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

2.这是普通的插入排序java实现:

 1     public static void insertSort(int[] arr){
 2         for(int i=0;i<arr.length;i++){
 3             int j = i;
 4             int k = j-1;
 5             while(k>=0){
 6                 if(arr[k]>arr[j]){
 7                     int tmp = arr[k];
 8                     arr[k] = arr[j];
 9                     arr[j] = tmp;
10                     j--;
11                     k--;
12                 }else{
13                     break;
14                 }
15             }
16         }
17     }

3.二分排序java代码实现如下:

 1     public static void binarySort(int[] arr){
 2         for(int i=1;i<arr.length;i++){
 3             int left= 0;
 4             int right= i-1;
 5             int pivot = (left+right)/2;
 6             while(left<right){
 7                 while(left<right){
 8                     if(arr[pivot]>arr[i]){
 9                         right = pivot-1;
10                         pivot = (left+right)/2;
11                     }else{
12                         break;
13                     }
14                 }
15                 while(left<right){
16                     if(arr[pivot]<arr[i]){
17                         left = pivot+1;
18                         pivot = (left+right)/2;
19                     }else{
20                         break;
21                     }
22                 }
23             }
24             if(left>=right){
25                 if(arr[pivot]<arr[i]){
26                     pivot++;
27                 }
28                 int j = i;
29                 int k = j-1;
30                 while(k>=pivot){
31                     int tmp = arr[j];
32                     arr[j] = arr[k];
33                     arr[k] = tmp;
34                     j--;
35                     k--;
36                 }
37             }
38         }
39
40     }

二分排序的时间复杂度:O(n^2),空间复杂度:O(1)

转载于:https://www.cnblogs.com/davidxu/p/9189166.html

二分排序java实现相关推荐

  1. 八大排序:Java实现八大排序及算法复杂度分析

    目录 QUESTION:八大排序:Java实现八大排序及算法复杂度分析 ANSWER: 一:冒泡排序 1.算法分析 2.时间复杂度分析 3.代码 二:选择排序 1.算法分析 2.时间复杂度分析 3.代 ...

  2. 算法练习5---快速排序Java版

    基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成 ...

  3. 计数排序和桶排序 java代码实现

    文章目录 计数排序 java代码实现 单元测试 桶排序 java代码实现 单元测试 计数排序 java代码实现 package csdn.dreamzuora.sort;import java.uti ...

  4. 二分查找 java代码实现

    文章目录 二分查找java代码 单元测试 二分查找java代码 package csdn.dreamzuora.query;/*** Title: 二分查找* Description:* 时间复杂度: ...

  5. 希尔排序java代码_希尔排序及希尔排序java代码

    由上图可看到希尔排序先约定一个间隔(图中是4),然后对0.4.8这个三个位置的数据进行插入排序,然后向右移一位对位置1.5.9进行插入排序按照此规律直到全部参与了排序.然后将间隔约定为4-1=3,然后 ...

  6. week06_task_二分, 排序

    六.二分, 排序 目录 六.二分, 排序 来源 1 二分法 1.1 基本思想 1.2 **直接找法** 1.3 排除法(lower_bound and upper_ bound) 1.4 相关题目 2 ...

  7. Java List排序 java ListMap 排序 Java listmap 模拟 oracle 排序 Java listmap 模拟 mysql 排序

    Java List排序 java ListMap 排序 Java listmap 模拟 oracle 排序 Java listmap 模拟 mysql 排序 一.概述 近期的开发工作中,遇到一个需求: ...

  8. 二分排序法(折半插入法)

    二分排序法貌似是第一次听说,在wangsifu2009的博客上看到. 以前只听说过堆排序.快排序.希尔排序.选择.插入.冒泡排序,于是在网上搜索了一下,其代码实现是这样的: #include < ...

  9. 姓名,地址按照A,B,C......来排序java

    姓名,地址按照A,B,C-来排序 java代码: 导入依赖: 查询首字母的读音 <dependency><groupId>com.belerweb</groupId> ...

最新文章

  1. 平凡的世界和你我 (武惠良与杜丽丽)
  2. C语言如何产生随机数
  3. python多线程多进程多协程_python 多进程、多线程、协程
  4. POJ 3258 -- River Hopscotch(二分)
  5. Luogu-P3205-HNOI2010-合唱队
  6. mac idea配置配置自动清除类中无用的import包
  7. 史上最难逻辑题!据说99.9%的人都做不出来……
  8. 团队工作室展示官网源码带后台-源团V1.0版本
  9. TypeError: Cannot set properties of undefined (setting ‘innerHTML‘)
  10. 真是搞不懂原始套接字SOCK_RAW和AF_PACKET
  11. 仿百度文库实现文档在线预览
  12. php分页代码简单实现
  13. Visio图片导入到Word里面的步骤
  14. 操作系统启动后 计算机处于 模式,电脑开机出现选择操作系统。怎么办?
  15. android 多渠道打包不同的包名、应用名、应用图标
  16. 网络打印协议之LPR或RAW
  17. STM32 RTOS创建消息队列的两种方式(解决数据类型问题)
  18. 信息系统项目管理师学习笔记1——信息化与信息系统1
  19. 模型优化中的过拟合与欠拟合
  20. 卸载后依然无法安装签名不一致的APP

热门文章

  1. java怎么写事件listener_java 事件监听器ActionListener
  2. 算法代码中的循环矩阵在哪体现_「Machine Learning 学习小结」| 向量在梯度下降算法当中的应用...
  3. mysql 函数返回查询结果_MySQL数据库中常用查询函数简介
  4. php数据回显是什么意思,jquery回显是什么意思
  5. 敏感词过滤的php代码,PHP敏感词过滤
  6. linux ftp用户指定多个目录,linux ftp服务器下用户限制目录的方法
  7. 一、Pytho第一课——Python安装及配置路径方法(最详细小白教程,没有之一。如若不懂,不是还可以私信嘛!对吧?)
  8. codeforces B. Pasha and String(贪心)
  9. 2014 网选 5014 Number Sequence(异或)
  10. codeforces Restore Cube(暴力枚举)