插入排序法 所谓插入排序法乃是将一个数目插入该占据的位置。假设我们输入的是 “5,1,4,2,3” 我们从第二个数字开始,这个数字是1,我们的任务只要看看1有没有正确的位置,我们的做法是和这个数字左边的数字来比,因此我们比较1和5,1比5小,所以我们就交换1和5,原来的排列就变成了“1,5,4,2,3...
插入排序中,当待排序数组是有序时,是最优的情况,只需当前数跟前一个数比较一下就可以了,这时一共需要比较N-1次,时间复杂度为O(N)。最坏的情况是待排序数组是逆序的,此时需要比较次数最多,最坏的情况是O(n^2)。 三、过程图示 假设前面n-1(其中n>=2)个数已经是排好顺序的,现将第n个数插到前面已经...
1.插入排序算法详解 插入排序和选择排序有一个异曲同工的地方在于他们都存在一个:在原数组上创建子数组的思想,这两种排序方法都会将原数组分为两个部分:待排序数组与已排好序的数组,但是这两种算法的内核思想却截然不同,现在我们来理解一下插入排序是怎么实现的。 首先我们得到了一个无序的数组,现在我...
1. 直接插入排序Insert Sort 1.1 Insert Sort介绍 Insert Sort也是一种简单的内部排序算法,其是对待排序的元素以插入的方式寻找该元素的适当位置,以达到排序的目的,是一种稳定的排序算法。 Inser Sort的基本思想是:将待排序序列看作一个有序表和一个无序表,初始时有序表仅包含一个元素,而无序表中包含n - 1个...
评:除了插入排序(左边排好序右边未排序),典型的还有二分查找(if判断中左边check为true右边check为false或者左边check为false右边check为true),这些算法都具有明显的二段性。 伪代码中的一些约定(Pseudocode conventions) 缩进表示块结构。 while、for、repeat-until等循环结构以及if-else等条件结构的含义与其在C、C++、...
插入排序将数组分为已排序区间和未排序区间,初始已排序区间只有数组第1个元素,未排序区间从下标 1 开始到数组末尾。每次取未排序区间的第1个元素,将它插入已排序区间的合适位置,并保证已排序区间一直有序。重复这个过程,直到未排序区间为空,算法结束。 给有序数组(已排序区间)插入1个新元素,并保持数组有序,很容易...
【1】插入排序 (1)基本概念 插入排序的时间复杂度为O(n^2)。 插入排序是稳定的排序方法(参见随笔《常用排序算法稳定性分析》)。 插入排序算法适用于少量数据的排序。 在此,我们只研究直接插入排序和二分插入排序。 (2)排序逻辑 <1>直接插入排序 直接插入排序是由两层嵌套循环组成的。外层循环标识并决定待比较...
插入排序(Insertion Sort)算法是一个对少量元素进行排序的有效算法。 插入排序是稳定的(即:两个相等的数不会交换位置)。 二、分类 直接插入排序,二分插入排序(又称折半插入排序),链表插入排序,希尔排序(又称缩小增量排序)。 (注:此文只讲直接插入排序,其他插入排序有时间会另写博客。) ...
1.用玩扑克的方式解释插入排序 要点在于: (1)前提:每次插入新的值时,前面的序列都是有序的 (2)但和插入扑克牌有一点不同,不可能在两个相邻的存储单元之间再插入一个单元,因此要将插入点之后的数据依次往后移动一个单元。 2.插入排序的算法如下: