二分插入排序也称折半插入排序,基本思想是:设数列[0....n]分为两部分一部分是[0...i]为有序序列,另一部分是[i+1.....n]为无序序列,从无序序列中取一个数 x ,利用二分查找算法找到 x 在有序序列中的插入位置并插入,有序序列还是有序的,接下来重复上述步骤,直到无序序列全部插入有序序列 ,这是整个序列只剩下有序序列即有序了. 01 void  BinaryInsertSort(int *pArray, int len) 02 { 03   //刚开始设有序序列只有一个元素 pA…
对于算法思想的理解可以参考下面的这个帖子,十大经典排序算法(动图演示) - 一像素 - 博客园,因为算法的逻辑和数学很像,相应的基础资料一般也能在网上找到,所以,本帖子这谈论一些重要的注意点,其他人讲到的我就不提了,在实现的过程中可能有些代码不是很理解,其他的就相对比较容易多了. 整体按照这个顺序来,也比较好记忆一点: 一.交换排序 1.冒泡排序,基本过程参考前面的帖子,实现代码: void BubbleSort(int a[], int n) // 本算法将a[]中的元素从小到到大进行排序 {…
java排序算法(七):折半插入排序 折半插入排序法又称为二分插入排序法,是直接插入排序法的改良版本,也需要执行i-1趟插入.不同之处在于第i趟插入.先找出第i+1个元素应该插入的位置.假设前i个数据是已经处于有序状态 代码实现 package com.spring.test; /** * 折半插入排序 */ public class BinaryInsertSort { public static void main(String[] args) { int[] data = new int[…
算法,我在路上,将自己了解的算法内容全部梳理一遍! 今天介绍简单点的,插入排序. 首先,什么是插入排序,这个维基百科上有.个人的理解,就是将一个数插入到一个已经排好序的数列当中某个合适的位置,使得增加了一个元素的新的数列依然是有序的.比如,当前有一个待排序的数组A,我们可以认为这个数组是由两部分组成的,一部分是有序的数列B,一部分是无序的数列C,将无序数列中的元素逐个的取出,添加到有序数列中,两个数列的长度是变化关系是:B从1逐次增加1,而C的长度是逐次减少1,直到B的长度和A一样长,C的长度为…
数据结构中常见的内部排序算法: 插入排序:直接插入排序.折半插入排序.希尔排序 交换排序:冒泡排序.快速排序 选择排序:简单选择排序.堆排序 归并排序.基数排序.计数排序 直接插入排序: 思想:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中,直到全部记录插入完成. 性能:时间复杂度:最好o(n):有序,最坏o(n^2):逆序,平均o(n^2):空间复杂度o(1):稳定 public int[] straightInsertSort(int array[]){ int tem…
内部排序是指在排序期间数据元素全部存放在内存的排序.外部排序是指在排序期间全部元素的个数过多,不能同时存放在内存,必须根据排序过程的要求,不断在内存和外存之间移动的排序.本次主要介绍常见的内部排序算法. 1. 直接插入排序 直接插入排序的算法思想是把待排序序列a[n]中的n个元素看作是一个有序表和无序表.开始时有序表中只包含第一个元素a[0],无序表中包含n-1个元素a[1]~a[n-1],排序过程中每次从无序表中拿出第一个元素,把它插入有序表的适当位置,使之成为新的有序表,有序表中的元素个数加…
文字描述 和直接插入排序比较,只是把“查找”操作利用“折半查找”来实现,由此进行的插入排序叫做折半插入排序. 示意图 略 算法分析 和直接插入排序比,减少了比较次数,但是移动次数没有变,所以折半插入排序算法的时间复杂度仍然是n*n, 辅助空间为1,是稳定的排序方法. 代码实现 #include <stdio.h> #include <stdlib.h> #define EQ(a, b) ((a) == (b)) #define LT(a, b) ((a) < (b)) #de…
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let‘s go~~~ 1.排序算法的基本概念的讲解 时间复杂度:需要排序的的关键字的比较次数和相应的移动的次数. 空间复杂度:分析需要多少辅助的内存. 稳定性:如果记录两个关键字的A和B它们的值相等,经过排序后它们相对的位置没有发生交换,那么我们称这个排序算法是稳定的. 否则我们称这个排序算法是不稳定的…
写在前面: 排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素的随意序列,又一次排列成一个按keyword有序的序列.因此排序掌握各种排序算法很重要. 对以下介绍的各个排序,我们假定全部排序的keyword都是整数.对传入函数的參数默认是已经检查好了的.仅仅是简单的描写叙述各个算法并给出了详细实现代码.并未做其它深究探讨. 基础知识: 因为待排序的记录数量不同,使得排序过程中设计的存储器不同,可将排序方法分为两大类:一类是内部排序,指的是待排序记录存放在计算机随机存储器中进行的排序过…
基本思想: 折半插入算法是对直接插入排序算法的改进,排序原理同直接插入算法: 把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有n-1个元素:排序过程即每次从无序表中取出第一个元素,将它插入到有序表中,使之成为新的有序表,重复n-1次完成整个排序过程. 与直接插入算法的区别在于:在有序表中寻找待排序数据的正确位置时,使用了折半查找/二分查找. 实例: (参考直接插入排序算法:http://www.cnblogs.com/snowcan/p/6244128.htm…