二分排序java实现

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/538459.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pearson相关系数_pearson相关系数与典型相关性分析(CCA)

本文主要介绍相关系数的概念&#xff0c;以及简单相关系数中的pearson相关系数及其局限性。随后介绍pearson相关系数无法解决的问题(两个变量组之间的相关性问题)的解决方案。1、pearson相关系数在日常中&#xff0c;我们经常会遇到一些关于相关性的分析&#xff0c;例如&#…

快学Scala习题解答—第三章 数组相关操作

原文链接&#xff1a;http://blog.csdn.net/ivan_pig/article/details/8257365 -------------------------------------------------- 4 数组相关操作 4.1 编写一段代码&#xff0c;将a设置为一个n个随机整数的数组&#xff0c;要求随机数介于0(包含)和n(不包含)之间 random和…

seo自动工具_爱站SEO工具包详细介绍

爱站SEO工具-seoer的瑞士军刀&#xff01;这个工具主要是为了方便SEOer查询一些网站的问题&#xff0c;监控关键词排名收录等等&#xff0c;新手老手都可以用的工具&#xff0c;更快的让SEOer上手。相信有很多SEOer都使用过爱站SEO工具包&#xff0c;也有很多新入行的小伙伴可能…

人物三(依芙蒂法)

转载于:https://www.cnblogs.com/song1900/p/9189921.html

常用Oracle分析函数详解

原文链接&#xff1a;http://www.cnblogs.com/benio/archive/2011/06/01/2066106.html --------------------------------------------------------------------------- 学习步骤&#xff1a; 1. 拥有Oracle EBS demo 环境 或者 PROD 环境 2. copy以下代码进 PL/SQL 3. 配合解…

XML文件结构和基本语法

XML文件的结构性内容&#xff0c;包括节点关系以及属性内容等等。元素是组成XML的最基本的单位&#xff0c;它由开始标记&#xff0c;属性和结束标记组成。就是一个元素的例子&#xff0c;每个元素必须有一个元素名&#xff0c;元素可以若干个属性以及属性值。 xml文件和html文…

python表格数据分类聚合_3-python数据分析-pandas高级操作之替换、映射、随机抽样、分组、高级数据聚合、数据加载、透视表、交叉表...

3-python数据分析-pandas高级操作之替换、映射、随机抽样、分组、高级数据聚合、数据加载、透视表、交叉表替换操作 replace替换操作可以同步作用于Series和DataFrame中单值替换普通替换&#xff1a; 替换所有符合要求的元素:to_replace15,value’e’按列指定单值替换&#xff…

oracle-SQL-case when 改用 DECODE

SELECT CASE FLOOR_LINE_ID WHEN 1 THEN 高铁 WHEN 2 THEN 高速 WHEN 3 THEN 公路 WHEN 5 THEN 地铁 ELSE 其他 END AS LINE_NAME, FLOOR_LINE_ID FROM ( SELECT FLOOR(LINE_ID/100) AS FLOOR_LINE_ID FROM DT4_LINE_NAME ) 改…

lcp mysql cluster_Mysql Cluster 非root用户启动ndbd节点报错

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼1.配置文件&#xff0c;如下&#xff1a;[rootcent178 ~]# ls -lart /etc/my.cnf-rw-rw-r-- 1 mysql mysql 3055 Oct 31 17:29 /etc/my.cnf2.集群数据存储文件夹&#xff0c;如下&#xff1a;[rootcent178 ~]# ls -lart /var/lib/m…

fatal: Could not read from remote repository.的解决办法

原文地址&#xff1a;http://blog.csdn.net/huahua78/article/details/52330792 --------------------------------------------------------------------------------- 查看远端地址 git remote –v 查看配置 git config --list git status git add . // 暂存所有的更改git…

python中mako中loop_python中Mako库实例用法

Mako是一个模板库。一种嵌入式的语言&#xff0c;能够实现简化组件布局以及继承&#xff0c;主要的用途也是和作用域有关&#xff0c;但是效果是最直接切灵活的&#xff0c;这些都是mako的基本功能&#xff0c;掌握了基础内容&#xff0c;接下来就是详细的了解讲述&#xff0c;…

springmvc是什么_SpringBoot与SpringMVC的区别是什么?

简单的来说&#xff1a;SpringMVC和SpringBoot都是Spring家族的重要成员。Spring家族的使命就是为了简化而生。SpringMVC简化我们日常Web开发的&#xff0c;后来随着自身的发展&#xff0c;SpringMVC变得臃肿复杂&#xff0c;而SpringBoot则进一步简化了SpringMVC开发。SpringM…

git 上传代码到码云

与码云建立连接教程&#xff1a;http://blog.csdn.net/zengmingen/article/details/76045076 如果完成了上面步骤的&#xff0c;且有了git。上传项目步骤&#xff1a; 代码提交 代码提交一般有五个步骤&#xff1a; 1.查看目前代码的修改状态 2.查看代码修改内容 3.暂存需要提交…

你不知道的js中关于this绑定机制的解析[看完还不懂算我输]

前言 最近正在看《你不知道的JavaScript》&#xff0c;里面关于this绑定机制的部分讲的特别好&#xff0c;很清晰&#xff0c;这部分对我们js的使用也是相当关键的&#xff0c;并且这也是一个面试的高频考点&#xff0c;所以整理一篇文章分享一下这部分的内容&#xff0c;相信看…

visual studio过期登录不了账户_具有最高管理权限账户,Windows 7设置Administrator密码永不过期...

今天介绍操作系统具有最高管理权限的账户&#xff0c;Windows 7如何设置Administrator账户密码永不过期。小伙伴们可能不知道&#xff0c;和Windows Vista操作系统一样&#xff0c;在Windows 7操作系统中是不能预先使用Administrator这个具有最高管理权限的账户的。同时也可能不…

Tomcat安装与环境变量的配置-Linux+windows

原文链接&#xff1a;http://jingyan.baidu.com/article/8065f87fcc0f182330249841.html ------------------------------------------------------------ 1&#xff0c;新建变量名&#xff1a;JAVA_HOME&#xff0c;变量值&#xff1a;C:\Program Files\Java\jdk1.7.0 2&…

python如何读取配置文件获取url以及hhead_读取INI配置文件内容(头文件head)

/************************************************************FileName: getini.h // 文件名称Author: yuanfen127 // 作者Date: 2005-03-31 // 日期Description: // 描述本文件的内容,功能,内部各部分之间的关系// 以及文本文件与…

cad隐藏图层命令快捷键_cad快捷键f是什么命令?cad中f快捷键都有哪些?

1. F1 该功能键打开AutoCAD帮助窗口。如果用户遇到此软件中的任何功能问题,它可以使用户在线获得帮助。如果用户离线工作,而不是按此键,则该软件的所有功能都将以PDF格式打开。 2. F2 该键将打开一个弹出屏幕,在底部显示命令行。该命令对于在屏幕底部看不到命令窗口的用户很…

angular2或4部署到tomcat中,让他跑起来

原文地址&#xff1a;http://blog.csdn.net/rotating_windmill/article/details/76768793 ------------------------------------------------------------------------- 首先使用构建命令(npm run build或ng build)打包&#xff0c;打包完成后项目中会出现一个dist的目录&…

java 高级编程进阶_JAVA高级编程之hibernate进阶学习

二级缓存hibernate的session缓存在事务级别进行持久化数据的缓存操作。 当然&#xff0c;也有可能分别为每个类(或集合)&#xff0c;配置集群、或 JVM 级别(SessionFactory 级别)的缓存。你甚至可以为之插入一个集群的缓存。注意&#xff0c;缓存永远不知道其他应用程序对持久化…