`

排序算法(三)二分查找插入排序

 
阅读更多
package com.algorithm.sort;
 
 public class BinaryInsertSort {
 
 	/**
 	 * 使用二分查找法  进行插入排序
 	 * 时间复杂度为:n*lgn
 	 * @param args
 	 */
 	public static void main(String[] args) {
 		int[] sourceArray = {100, 22,42,12,73,24,15,31,27,48,9};
 		BinaryInsertSort bis = new BinaryInsertSort();
 		int[] targetArray = bis.sort(sourceArray);
 		for (int i = 0; i < targetArray.length; i++) {
 			int j = targetArray[i];
 			System.out.println(j);
 		}
 	}
 	
 	private int[] sort(int [] sourceArray){
 		for (int i = 1; i < sourceArray.length; i++) {
 			System.out.println("==================================" + i);
 			sort(sourceArray, i, 0, i-1);//将位置i的数据插入到数据  0~i-1位中
 		}
 		return sourceArray;
 	}
 	
 	/**
 	 * 将sourceArray中第i个元素插到正确0~i-1中的某个位置
 	 */
 	private void sort(int[] sourceArray, int i, int low, int high){
 		if(sourceArray[high] > sourceArray[i]){//如果第i-1位大于第i位,则需要进行查找
 			int temp = sourceArray[i];
 			while(low <= high && high > 0){
 				int middle = (low + high)/2;
 				if(sourceArray[middle] > temp){
 					high = middle - 1;
 				}else{
 					low = middle + 1;
 				}
 			}
 			for (int j = i; j > low; j--) {
 				sourceArray[j] = sourceArray[j-1];
 			}
 			sourceArray[low] = temp;
 		}
 	}
 }
 
分享到:
评论

相关推荐

    二分查找排序算法.zip

    二分查找排序算法是一种高效的排序方法,它是基于二分查找思想和插入排序的结合体。在计算机科学中,排序算法是处理数据集合的一种基础方法,它使得数据按照特定的顺序排列,例如升序或降序。二分查找排序算法特别...

    模拟实验-C#版基于二分查找的稳定“插入排序”算法

    这有助于我们了解在实际应用中,二分查找插入排序与冒泡排序在处理相同数据集时的速度差异。 总的来说,这个实验提供了一个深入理解和实践排序算法的平台,特别是如何利用二分查找优化插入排序的过程。通过对C#代码...

    C# 经典排序算法大全和二分查找算法

    本资源“C#经典排序算法大全和二分查找算法”提供了多种经典的排序算法实现,以及C#中的二分查找算法。让我们深入探讨这些算法的原理、实现方式以及它们在实际开发中的应用。 首先,我们来看一下排序算法。排序是将...

    MATLAB实现插入排序、二分归并排序、归并排序.rar

    不同之处在于,归并排序不使用二分查找,而是将数组分为两半,然后对每一半进行排序,再合并。归并排序在MATLAB中实现时,也需要递归地将数组划分为更小的部分,直到每个部分仅包含一个元素,然后逐步合并这些元素,...

    数据结构查找、排序、二分查找、折半查找算法

    在这个主题中,我们主要关注查找和排序算法,特别是二分查找(折半查找)算法。这些算法在实际编程中具有广泛应用,包括数据库索引、搜索引擎优化和各种计算问题的解决。 首先,我们来看查找算法。查找是数据结构中...

    查找算法和排序算法小结

    本文总结了常见的查找算法和排序算法,包括顺序查找、二分查找、选择排序、冒泡排序、二分排序、插入排序、希尔排序、堆排序、归并排序等。 一、查找算法 1. 顺序查找(Sequential Search) 顺序查找是一种简单...

    插入类排序算法

    折半插入排序的主要优点是查找插入位置的速度快,但由于插入操作仍然需要移动元素,所以其时间复杂度仍然是O(n^2),但在实际应用中,由于二分查找的效率,对于大规模数据的排序效果通常优于直接插入排序。...

    常用算法 2分法插入排序

    2分法插入排序(Binary Insertion Sort)是一种基于插入排序的算法,它结合了二分查找的策略来优化传统插入排序的过程。在传统插入排序中,我们需要将一个新元素与已排序的序列逐个比较,找到合适的位置插入。而2分...

    用C语言实现常用排序算法

    2. 折半插入排序:在插入新元素时使用二分查找,减少了比较次数,提高了效率,适用于大规模数据。 3. 起泡排序:通过相邻元素的交换逐步将最大(或最小)元素“冒泡”到数组末尾。 4. 简单选择排序:每次选择当前...

    希尔排序,直接插入排序,折半插入排序算法.

    根据给定文件中的标题、描述、标签以及部分内容,我们可以总结出关于希尔排序(Shell Sort)、直接插入排序(Direct Insertion Sort)以及折半...而折半插入排序则结合了二分查找的优势来减少比较次数,提高排序速度。

    查找排序算法应用

    2. **熟练掌握顺序表和有序表的顺序查找和二分查找方法**:顺序表是线性表的一种,而二分查找适用于有序表。 3. **掌握排序的不同方法,并能够用高级语言实现排序算法**:排序算法包括直接插入排序、选择排序和冒泡...

    Java排序算法和查找算法

    该工具包含有Java一些比较常见的排序算法和查找算法。 排序算法包括:冒泡排序、选择排序 、插入排序、希尔排序、快速排序、归并排序、基数...查找算法包括:线性查找、二分查找、插值查询、斐波那契(黄金分割法)、

    易语言算法源码(二分直接插入排序)

    在直接插入排序中,新元素通常通过线性搜索找到它应该插入的位置,而二分直接插入排序则利用了二分查找来提高这个过程的效率。 在易语言中,这是一种使用易语言编程实现的排序算法。易语言是一种中文编程环境,它...

    二分法直接插入排序算法

    而“二分法直接插入排序”则是对传统直接插入排序的一种优化,它利用了二分查找的特性来减少在排序过程中查找插入位置的时间复杂度。 直接插入排序的基本步骤如下: 1. 假设数组中的第一个元素已经排序,从第二个...

    易语言源码二分插入排序.rar

    它结合了二分查找的效率与插入排序的稳定性。在这个“易语言源码二分插入排序.rar”压缩包中,我们可以找到一个用易语言实现的二分插入排序的代码示例。 易语言是一种中国本土开发的、面向对象的编程语言,其设计...

    Java常用排序算法&程序员必须掌握的8大排序算法+二分法查找

    综上所述,掌握这些排序算法和二分查找技巧对于Java程序员来说至关重要,它们不仅能提升编程能力,也有助于解决实际问题,提高代码的运行效率。通过学习和实践,你将能够更好地应对各种编程挑战。

    Java直接插入排序算法源码

    - **二分查找**:在寻找插入位置时,可以使用二分查找法降低比较次数,但这种方法只减少了比较操作,不会改变整体的时间复杂度。 - **交换优化**:在元素移动过程中,可以考虑使用双指针技术,减少元素的物理移动...

    算法可视化系列——排序算法——插入排序

    1. **二分插入排序**:在查找插入位置时,采用二分查找可以减少比较次数,提高效率,但总的时间复杂度仍为O(n^2),只是常数因子变小。 2. **稳定性和不稳定性**:插入排序是稳定的排序算法,即相等的元素在排序后的...

    快速排序 希尔排序 插入排序 折半排序算法

    - 折半插入排序是插入排序的一个变体,它在插入元素时使用二分查找来确定插入位置,从而减少比较次数。 - 在查找插入位置时,将数组分成已排序部分和未排序部分,用二分查找找到已排序部分中合适的位置,然后将...

    数据结构各种查找排序算法的实现

    常见的查找算法有线性查找、二分查找和哈希查找。线性查找是最基础的方法,但效率较低,适用于未排序的数组。二分查找则利用了数组的有序性,大大提高了查找速度,适用于已排序的数组。哈希查找通过哈希函数将元素...

Global site tag (gtag.js) - Google Analytics