二分排序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.pswp.cn/news/538459.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/538459.shtml
英文地址,請注明出處:http://en.pswp.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;緩存永遠不知道其他應用程序對持久化…