排序算法之折半插入排序的思想以及Java实现
1 基本思想
折半插入排序(binary insertion sort)的基本原理与直接插入排序相同,不同之处在于,确定当前记录在前面有序子数组中的位置时,直接插入排序是采用顺序查找的方法,而折半插入排序是采用折半查找的方法,因此它仅适用于顺序存储的线性表。
2,算法的实现(Java)
package Algorithm;
public class binary_insert_sort {
/**
* @param args
*/
public static void main(String[] args) {
int array[] = {23,12,34,56,78,67,99,100};
System.out.println("---------排序前的结果----------");
binary_insert_sort.output(array);
System.out.println("---------排序后的结果----------");
binary_insert_sort.binary_insert_sort(array);
binary_insert_sort.output(array);
}
//折半插入排序算法
public static void binary_insert_sort(int[] arr){
int low,high,mid,temp,j;
for(int i=1;i<arr.length;i++){
temp = arr[i];
low = 0;
high = i-1;
while(low <=high){
mid =(high+low)/2;
if(arr[mid] > temp){
high = mid -1;
}
else
{
low = mid+1;
}
}
for(j = i-1;j >=high+1; j--)
arr[j+1] = arr[j];
arr[j+1] = temp;
}
}
//输出打印
public static void output(int[] arr){
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+",");
}
System.out.println();
}
}
得到的结果如下所示:
3,性能分析
折半查找只是减少了比较次数,但是元素的移动次数不变。因此,它的
空间复杂度 O(1) ,时间复杂度O(n^2),是一种稳定的排序算法
排序算法之折半插入排序的思想以及Java实现的更多相关文章
- 排序算法之直接插入排序的思想以及Java实现
1,基本思想 假设待排序的数据是数组A[1-.n].初始时,A[1]自成1个有序区,无序区为A[2-.n].在排序的过程中,依次将A[i] (i=2,3,-.,n)从后往前插入到前面已排好序的子数组A ...
- Java常见排序算法之折半插入排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- 我的Java开发学习之旅------>Java经典排序算法之二分插入排序
一.折半插入排序(二分插入排序) 将直接插入排序中寻找A[i]的插入位置的方法改为采用折半比较,即可得到折半插入排序算法.在处理A[i]时,A[0]--A[i-1]已经按关键码值排好序.所谓折半比较, ...
- 排序算法之直接插入排序Java实现
排序算法之直接插入排序 舞蹈演示排序: 冒泡排序: http://t.cn/hrf58M 希尔排序:http://t.cn/hrosvb 选择排序:http://t.cn/hros6e 插入排序: ...
- Java常见排序算法之直接插入排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- 排序系列 之 折半插入排序算法 —— Java实现
基本思想: 折半插入算法是对直接插入排序算法的改进,排序原理同直接插入算法: 把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有n-1个元素:排序过程即每次从无序表中 ...
- 七内部排序算法汇总(插入排序、Shell排序、冒泡排序、请选择类别、、高速分拣合并排序、堆排序)
写在前面: 排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素的随意序列,又一次排列成一个按keyword有序的序列.因此排序掌握各种排序算法很重要. 对以下介绍的各个排序,我们假定全部排 ...
- 八大排序算法之直接插入排序(InsertionSort)
常见的排序算法 今天复习[直接插入排序] 核心思想:有序数组中 找位置 -- 给无序数组第一个 找位置 ` public class InsertionSort { // 核心思想:有序数组中 找位置 ...
- 结构-行为-样式-Js排序算法之 直接插入排序
最新因工作原因需要接触到算法,之前学习C++的时候有接触过算法,Javascript中实现算法其实也是大同小异.下面我讲下第一个实现的排序算法--直接插入排序.基本实现思路:假定一个数组中前n(n&g ...
随机推荐
- 华为路由器帧中继 FR 实验
帧中继简介 帧中继( Frame Relay)是一种用于连接计算机系统的面向分组的通信方法.它主要用在公共或专用网上的局域网互联以及广域网连接.大多数公共电信局都提供帧中继服务,把它作为建立高性能的虚 ...
- OJ:一道考察多态的题目
Description 下面程序的输出结果是: A::Fun C::Do 程序代码 #include <iostream> using namespace std; class A { p ...
- 伪指令 ENTRY 与 END
ENTRY ENTRY 是程序入口伪指令.在一个完整的汇编程序中至少有一个 ENTRY,编译程序在编译连接时依据程序入口进行连接.在只有一个入口时,编译程序会把这个入口的地址定义为系统复位后的程序起始 ...
- [转]PHP开发者必须了解的工具—Composer
本文转自:https://blog.csdn.net/Zhihua_W/article/details/80345973 Composer是PHP 用来管理依赖(dependency)关系的工具.你可 ...
- [转]MySQL忘记root密码解决方法
本文转自:https://www.cnblogs.com/wxdblog/p/6864475.html 今天重新装了一遍MySQL,因为用的是免安装的,所以需要重新设置密码,然后我一通,结果搞得自己也 ...
- EF(EntityFramework)与mysql使用,序列化问题[System.ObjectDisposedException]
在EF 中使用mysql关联取数据时,如果当前实体中包含另一个实体的list成员,而这个成员为空的话,在json序列化的时候就会报错: '((System.Data.Entity.DynamicPro ...
- [android] 在不同的activity之间传递数据
新建一个activity,继承Activity 清单文件中进行配置,添加<activity/>节点 设置名称 android:name=”.类名” 点 代表的是当前包名,也可以不写 新建一 ...
- curl模拟请求常用参数
封装一个curl模拟浏览器请求的函数,如下: /** * curl模拟浏览器请求 * @param unknown $url 请求的地址 * @param array $params 请求地址所需要的 ...
- IDEA插件(Android Studio插件)开发示例代码及bug解决
IDEA插件(Android Studio插件)开发示例代码及bug解决 代码在actionPerformed方法中,有个AnActionEvent e 插件开发就是要求我们复写上述的这个方法即可,在 ...
- Android LiveData使用
LiveData是一个可观察的数据持有者类. 与常规observable不同,LiveData是生命周期感知的,当生命周期处于STARTED或RESUMED状态,则LiveData会将其视为活动状态, ...