算法基础之插入排序
来源:互联网 发布:linux vi命令详解 编辑:程序博客网 时间:2024/06/05 04:39
插入排序算法对于少量元素的排序是一个有效的算法。
可以将其看作是大家排序一手扑克牌,开始时我们的左手为空,然后每次从牌堆里拿出一张牌并且按照一定顺序插入左手中正确位置,为了得到这个正确位置,我们需要从右到左将其与已在手中的每张牌进行对比。
伪代码表示
INSERTION-SORT(A)for i = 1 to A.length temp = A[i] j = i - 1; while j > 0 and A[j] > temp A[j + 1] = A[j] j = j - 1 A[j + 1] = temp
笔者在这里先说明一下,A为数组A[1…n],长度为n的待排序数组,伪代码根据不同的编译语言最后写出的结果有所不同,笔者仅展示Java编写的代码。
Java代码
public static int[] sort(int[] queue) { if (queue == null || queue.length < 2) { return queue; } int temp; for (int i = 1; i < queue.length; i++) { for (int j = i; j > 0; j--) { if (queue[j] < queue[j - 1]) { temp= queue[j]; queue[j] = queue[j - 1]; queue[j - 1] = temp; } } } return queue;
排序过程大致为:
插入排序的时空复杂度
1、时间复杂度,在最坏情况下,数组完全逆序,插入第2个元素时要考察前1个元素,插入第3个元素时,要考虑前2个元素,……,插入第N个元素,要考虑前N-1个元素。因此,最坏情况下的比较次数是 1 + 2 + 3 + … + (N - 1),等差数列求和,结果为 N^2 / 2,所以最坏情况下的复杂度为 O(N^2)。
2、时间复杂度,在最好情况下,数组已经是有序的,每插入一个元素,只需要考查前一个元素,因此最好情况下,插入排序的时间复杂度为O(N)。
3、插入排序算法的空间复杂度为一个常量,即不随被处理数据量n的大小而改变时,可表示为O(1);
以上,就是笔者对于插入排序的初略见解。
0 0
- 基础算法之插入排序
- 算法基础之插入排序
- 算法基础之排序篇-插入排序
- 基础算法--排序: 之插入排序
- 基础算法之排序(3)--插入排序
- 算法基础之排序—插入排序
- 算法(algorithms)基础之:插入排序
- 算法基础之----直接插入排序
- 基础算法系列(七)排序算法之插入排序
- 【基础算法】排序-简单排序之三(插入排序)
- 基础算法-插入排序
- 基础算法-插入排序
- 【基础算法】插入排序
- 【算法基础】插入排序
- 【基础算法】-- 插入排序
- 基础算法之四--排序: 之插入排序
- python实现基础排序算法之(插入排序)
- 算法之插入排序
- Android N 新特性
- 【.NET】合并文件夹
- C++中参数传递方式讨论
- 字符匹配
- stars
- 算法基础之插入排序
- mongodb 的 curd
- [Thinking in Java]
- 九度 oj 题目1072:有多少不同的面值组合?
- Color the ball
- Java网络01基本网络概念
- Servlet实现简单的用户登录
- Spring中属性配置(配置Properties属性值(通过props,props子节点 )为属性赋值)
- 设计模式之工厂方法模式