排序算法二:二分插入排序

一.算法思想

  1.二分插入排序的基本思想和插入排序一致;都是将某个元素插入到已经有序的序列的正确的位置;

  2.和直接插入排序的最大区别是,元素A[i]的位置的方法不一样;直接插入排序是从A[i-1]往前一个个比较,从而找到正确的位置;而二分插入排序,利用前i-1个元素已经是有序的特点结合二分查找的特点,找到正确的位置,从而将A[i]插入,并保持新的序列依旧有序;

  3.时间复杂度:

  T(n) = O(n);

二.代码

  

 1 class BinaryInsertSort{
 2      public static void sort(int[] A)  {
 3          int len =A.length;
 4          int key = 0;
 5          int low = high = mid =0;
 6          for(int i =0 ;i<len;i++)  {
 7              key = A[i];
 8              low = 0;
 9              high = i-1;
10              while(low<=high){
11               mid = (high + low)/2;
12               if(key<A[mid]){
13                    high = mid -1;
14               }
15               else{
16                       low = mid+1;
17                }
18              }
19            for(int j = i-1;j>=high+1;j--){
20                   A[j+1] =A[j];
21            }
22            A[j+1] =key;
23          }
24    }
25 }            
时间: 2024-10-15 07:47:54

排序算法二:二分插入排序的相关文章

9种排序算法 2_二分插入排序

一 算法思想: 每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止:而查找适当位置的查找方法使用二分查找法,则叫做二分插入排序. 二 代码如下: public class Test2 { // 二分插入排序.随机数列中(100个),计算交换次数(交换的次数在2400-2800左右,时间复杂度O(n*n),效率与直接插入排序一样,只是改变查找方法) public static void binaryInsertSort(int[] array) { i

我的Java开发学习之旅------&gt;Java经典排序算法之二分插入排序

一.折半插入排序(二分插入排序) 将直接插入排序中寻找A[i]的插入位置的方法改为采用折半比较,即可得到折半插入排序算法.在处理A[i]时,A[0]--A[i-1]已经按关键码值排好序.所谓折半比较,就是在插入A[i]时,取A[i-1/2]的关键码值与A[i]的关键码值进行比较,如果A[i]的关键码值小于A[i-1/2]的关键码值,则说明A[i]只能插入A[0]到A[i-1/2]之间,故可以在A[0]到A[i-1/2-1]之间继续使用折半比较:否则只能插入A[i-1/2]到A[i-1]之间,故可

常见算法之排序算法二【插入排序】

什么是插入排序!简单的介绍一下它的思想(假设为升序):在已经排好序的数组内,插入新的元素,从后往前找,当找到某个比它小的数,则停止,并将它插入这个与上一个数之间.先给大家看个图: 具体算法描述如下: 1.从第一个元素开始,因为只有一个元素,所以它有序. 2.拿它后面的一个元素和它进行比较. 3.它后面的元素比它大,把他往后移,并把它后面的元素赋给它原来的位置. 4.重复3的动作,直到找到比它小或者相等的元素,将该元素插入到比它小的元素后面 5.重复2~5的操作 我们先来看看代码: <span s

排序算法之 Java插入排序算法

package net.qh.test.sort; import java.util.ArrayList; import java.util.Calendar; import java.util.List; /** * Created by Administrator on 2016/03/01. */ public class Insert { public int[] sort(int[] arr){ if ( arr == null || arr.length <= 1 ){ return

七大内部排序算法总结(插入排序、希尔排序、冒泡排序、简单选择排序、快速排序、归并排序、堆排序)

 写在前面: 排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素的任意序列,重新排列成一个按关键字有序的序列.因此排序掌握各种排序算法非常重要.对下面介绍的各个排序,我们假定所有排序的关键字都是整数.对传入函数的参数默认是已经检查好了的.只是简单的描述各个算法并给出了具体实现代码,并未做其他深究探讨. 基础知识: 由于待排序的记录数量不同,使得排序过程中设计的存储器不同,可将排序方法分为两大类:一类是内部排序,指的是待排序记录存放在计算机随机存储器中进行的排序过程.另一类是外部排序,

python几种排序算法和二分查找方法的实现

一.算法概念 - 含义:算法就是对问题进行处理且求解的一种实现思路或者思想. 评判程序优劣的方法 - 消耗计算机资源和执行效率(无法直观) 计算算法执行的耗时(不推荐,因为会受机器和执行环境的影响) 时间复杂度(推荐) 时间复杂度 - 评判规则:量化算法执行的操作/执行步骤的数量, - 如下列 def sumOfN(n): # 执行一步: theSum = 0 for i in range(1,n+1): # 下式一共执行n步,for循环不算一步,因为它是控制循环次数的 theSum = the

排序算法总结之插入排序

一,插入排序介绍 插入排序是基于比较的排序.所谓的基于比较,就是通过比较数组中的元素,看谁大谁小,根据结果来调整元素的位置. 因此,对于这类排序,就有两种基本的操作:①比较操作: ②交换操作 其中,对于交换操作,可以优化成移动操作,即不直接进行两个元素的交换,还是用一个枢轴元素(tmp)将当前元素先保存起来,然后执行移动操作,待确定了最终位置后,再将当前元素放入合适的位置.(下面的插入排序就用到了这个技巧)--因为,交换操作需要三次赋值,而移动操作只需要一次赋值! 有些排序算法,比较次数比较多,

排序算法一二分排序

二分插入排序 简介 二分排序是指利用二分法的思想对插入排序进行改进的一种插入排序算法, 可以利用数组的特点快速定位指定索引的元素. 二分法排序的思想 必须是有序数组 在插入第i个元素时,对前面的0-i-1元素进行折半,先跟他们中间的那个元素比, 如果小,则对前半再进行折半,否则对后半进行折半,直到left>right,找到位置 然后再把第i个元素前1位与目标位置之间的所有元素后移,再把第i个元素放在目标位置上. 复杂度 二分排序的时间复杂度是O(logn), 空间复杂度O(1),是稳定排序. 1

结构-行为-样式-Js排序算法之 直接插入排序

最新因工作原因需要接触到算法,之前学习C++的时候有接触过算法,Javascript中实现算法其实也是大同小异.下面我讲下第一个实现的排序算法--直接插入排序.基本实现思路:假定一个数组中前n(n>=2)个值已经排序好了,那我们就从第n+1个与前面进行比较,当  a[n+1] > a [i] && a[n+1] < a[i-1] 的时候则进行插入,以此类推. var arr = [23,85,61,37,55,12,63,12,99,39,70,21]; function