`
yjian84
  • 浏览: 40177 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java 折半插入排序

阅读更多
pdf文档上看到的。
直接插入排序算法简便、容易实现。当待排序元素的数量n 很小时,
这是一种较好的排序方法,但是通常待排序元素数量n 很大,则不宜采用直接插入排序方法,
此时需要对直接插入排序进行改进。
直接插入排序的基本操作是向有序序列中插入一个元素,插入位置的确定是通过对有序
序列中元素按关键字逐个比较得到的。既然是在有序序列中确定插入位置,则可以不断二分
有序序列来确定插入位置,即搜索插入位置的方法可以使用折半查找实现。
折半插入排序所需的辅助空间与直接插入排序相同,从时间上比
较,折半插入排序仅减少了元素的比较次数,但是并没有减少元素的移动次数,因此折半插
入排序的时间复杂度仍为O(n2)。



package test.sort;

import java.util.Arrays;

public class BinInsertSort {
	
	
	
	public int[] binInsertSort(int[] a){
		
		
		for(int i=1;i<a.length;i++){
			/**
			 *  保存当前操作值,记录高位hi用来做高低位的计算,低位永远是0
			 *  hi 是用来记录要插入的位置的上一个位置。
			 *  这样看来着个就是直接插入排序的一个改版,
			 *  只要记住:待操作元素前面的永远是有序的,对有序的集合做插入操作,找到插入点移动数据,插入就可以了。
			 */
			int tmp = a[i],hi = i-1,low = 0;
			
			while(low<=hi){//折半确定位置 
				int mid = (low+hi)/2;
				if(tmp<a[mid]){
					hi = mid -1;
				}else{
					low = mid+1;
				}
			}
			for(int j =i-1;j>hi;j--){
				a[j+1] =a[j];//在待插入位置后面的元素全部向后移动
			}
			a[hi+1] = tmp;//将元素插入指定空间
			
		}
		
		return a;
		
	}
  public static void main(String[] args) {
	  BinInsertSort b = new BinInsertSort();
		int[] as = { 1, 34, 56, 23, 67, 82, 4, 3, 2, 0, 13, 76, 90, 21, 24, 44,
				4 };
		int[] a = b.binInsertSort(as);
		System.out.println(Arrays.toString(a));
}
	

}
分享到:
评论

相关推荐

    Java快速排序+简单选择排序+折半插入排序

    做了个Java Swing 图形界面,选择3中排序方法进行排序。工程用NetBeans 打开,运行Main.java文件或直接点击运行主程序,...BinSort.java(折半插入排序) QKSort.java(快速排序算法) SelectSort.java(简单选择排序)

    排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序.mht

    排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序.mht

    Java实现直接插入排序和折半插入排序算法示例

    直接插入排序和折半插入排序是两种常见的简单排序算法,它们都基于比较和移动元素来达到排序的目的。这里我们将深入探讨这两种算法的实现、性能分析以及它们的特点。 **直接插入排序** 是一种基础的排序算法,其...

    java排序 折半法

    描述:这是一个非常好的排序示例,通过折半插入排序算法对数组进行排序,代码简洁明了,非常适合Java初学者学习理解。 知识点详解: ### 1. 折半插入排序(Binary Insertion Sort) 折半插入排序是插入排序的一种...

    java实现常见排序算法

    Java中常见的插入排序实现有三种:直接插入排序、折半插入排序和希尔排序。 1. **直接插入排序**: 直接插入排序的基本思想是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。在Java...

    java实现插入类排序算法

    主要是用java实现了数据结构中的直接插入排序,折半插入排序以及希尔排序。

    八大排序-java实现版

    八大排序java实现版本,直接插入排序、折半插入排序、冒泡排序、简单选择排序、希尔插入排序、快速排序 、堆排序、2-路归并排序 、基数排序,并有时间比较,博文...

    java 实现的排序

    本项目是一个完整的Java实现的排序系统,涵盖了冒泡排序、直接插入排序、快速排序、折半插入排序以及选择排序这五种经典的排序算法。下面我们将逐一探讨这些排序方法及其在Java中的实现。 1. **冒泡排序**:冒泡...

    java各种数组排序插入交换选择归类基数排序.pdf

    插入排序分为直接插入排序和折半插入排序。直接插入排序的基本思想是将未排序的元素逐个插入到已排序的序列中。折半插入排序则是通过二分查找来确定插入位置,减少了比较的次数。希尔排序是一种改进的插入排序,它...

    java写的基于比较的各种排序算法

    简单排序包括:选择排序,插入排序,折半插入排序,冒泡排序。 分治思想的排序包括:归并排序,快速排序,堆排序。 程序把随机生成的整数进行排序,开始时用1到7选择用哪种排序(没有图形界面,算法为主),堆排序...

    java插入排序 Insert sort实例

    Java插入排序主要分为两种实现方式:直接插入排序和折半插入排序。 1. 直接插入排序(Direct Insertion Sort) 直接插入排序的基本思想是,每次将一个待排序的记录,按其关键字大小插入到前面已经排序的子序列中的...

    JAVA排序汇总 java应用中一些比较经典的排序算法

    直接插入排序是将每个元素逐个插入已排序部分,而折半插入排序则是利用二分查找减少比较次数。希尔排序是插入排序的改进版,通过设置间隔序列来优化插入过程。 2. **交换排序**: 包括冒泡排序和快速排序。冒泡...

    java实现折半排序算法

    直接插入排序法在插入新元素时,需要从数组的开头到当前元素的位置逐个比较,而折半插入排序则避免了这种线性搜索,转而采用二分查找方法来快速定位插入位置。 在Java中,我们可以用如下的代码实现折半排序算法: ...

    Java 排序大全排序大全

    根据给定的信息,本文将详细解释Java中几种重要的排序算法:直接插入排序、折半插入排序、Shell排序、冒泡排序、快速排序、选择排序以及堆排序。 ### 直接插入排序 直接插入排序的基本思想是:将一个记录插入到...

    java各种数组排序(插入,交换,选择,归类,基数排序).pdf

    - 插入排序:包括直接插入排序、折半插入排序和希尔排序。直接插入排序是将一个元素依次与前面已排序的元素进行比较,找到合适的位置插入;折半插入排序在直接插入的基础上引入二分查找来减少比较次数;希尔排序则...

    插入排序等其它相关知识

    根据描述,我们可以将其分为两种类型:直接插入排序和折半插入排序。 1. **直接插入排序**: - **基本思想**:将当前元素与已排序的部分进行比较,如果当前元素小于已排序的元素,则将已排序的元素依次向后移动,...

    java实现数据结构内部排序.pdf

    这个PDF文档可能涵盖了多种内部排序算法的Java实现,包括直接插入排序、折半插入排序、希尔排序以及快速排序。以下是对这些排序算法的详细说明: 1. **直接插入排序(InsertSort)**: 直接插入排序是一种简单的...

Global site tag (gtag.js) - Google Analytics