JavaShowAlgorithm-优化的插入排序带着二分查找
来源:互联网 发布:匡威帆布鞋淘宝店代理 编辑:程序博客网 时间:2024/06/05 21:11
二分排序是指利用二分法的思想对插入排序进行改进的一种插入排序算法,不同于二叉排序,可以利用数组的特点快速定位指定索引的元素。
算法思想
二分法插入排序是在插入第i个元素时,对前面的0~i-1元素进行折半,先跟他们中间的那个元素比,如果小,则对前半再进行折半,否则对后半进行折半,直到left>right,然后再把第i个元素前1位与目标位置之间的所有元素后移,再把第i个元素放在目标位置上。
具体实现算法如下:
public class BinarySort {private int[] array;public BinarySort(int[] array) {this.array = array;}public void sort() {if (array == null) {throw new RuntimeException("array is null");}if (array.length > 0) {for (int i = 1; i < array.length; i++) {//i是接下来将要进行插入排序的int temp = array[i];// 二分查找插入位置,0...i-1代表已经排好序的int insertIndex = binarySearch(i - 1, temp); // if i== insertIndex 不需要移动if (i != insertIndex) {// 移动需要移动的元素for (int j = i - 1; j >= insertIndex; j --) {array[j + 1] = array[j];}// 插入元素array[insertIndex] = temp;}}}}public void print() {for (int i = 0; i < array.length; i++) {System.out.println(array[i]);}}/** * 二分查找定位插入索引 * @param maxIndex 有序区最大索引 * @param data 要找的值 * @return */private int binarySearch(int maxIndex, int data) { int start = 0;int end = maxIndex;int mid = -1;while (start <= end) {mid = (start + end) / 2;if (array[mid] > data) {end = mid - 1;} else {// 如果相等,也插入在后面start = mid + 1;}}return start;}}
二分排序的时间复杂度是O(n^2)这与普通插入排序是一样的,但是比较次数更少,更快
空间复杂度O(1),是稳定排序。
阅读全文
0 0
- JavaShowAlgorithm-优化的插入排序带着二分查找
- 排序算法之带二分查找的插入排序
- 数据结构--加入二分查找的插入排序(优化)
- JavaShowAlgorithm-二分查找BinarySearch算法
- 优化的直接插入排序(二分查找插入排序,希尔排序)
- 优化的直接插入排序(二分查找插入排序,希尔排序)
- 二分查找插入排序
- 二分查找插入排序
- 插入排序 二分查找
- 二分查找插入排序
- 二分查找插入排序
- 优化的二分查找插入算法
- 插入排序的二分查找策略
- 插入排序优化:简单插入排序->二分查找插入排序->二路插入排序->shell插入排序
- 【算法】_009_插入排序_二分查找优化
- 插入排序 二分查找插入排序
- 插入排序+二分查找
- 插入排序与二分查找
- 面向对象,类,多态,继承,常用关键字,异常
- Java环境变量配置问题:路径包含空格或特殊字符(_,~等)
- 电路加法初探
- 前端构建工具gulpjs的使用介绍及技巧
- 机器学习入门学习笔记:(4.2)核函数和软间隔
- JavaShowAlgorithm-优化的插入排序带着二分查找
- NetBeans工具学习之道:NetBeans IDE Java 快速入门教程
- MySQL索引类型总结和使用技巧以及注意事项
- Activity & Intent
- 一个经典例子让你彻彻底底理解java回调机制
- 机器学习实战—朴素贝叶斯及要点注解
- Dubbo入门---搭建一个最简单的Demo框架
- 【LeetCode 】102. Binary Tree Level Order Traversal
- mac下mongodb的一系列问题