一.排序方法
基本思想:被排列的数组data[0...n]。初始时,data[0]自成1个有序区,无序区为data[1..n];从i=1起直至i=n为止,依次将data[i]插入当前的有序区data[0..i-1]中,生成含n个记录的有序区。
- 将待插入元素data[i]从右向左依次与有序区中记录data[j](j=i-1,i-2,…,0)进行比较。
- 若data[j]大于data[i],则将data[j]后移一个位置。
- 若data[j]小于或等于data[i],则查找过程结束,j+1即为data[i]的插入位置。
二.动画演示
http://student.zjzk.cn/course_ware/data_structure/web/flashhtml/insertsort.htm
三.Java代码
public static int[] insertSort(int[] data) {
int temp = 0;
for (int i = 1; i < data.length; i++) {
if (data[i - 1] > data[i]) {
temp = data[i];
int j = i - 1;
for (; j >= 0 && data[j] > temp; j--) {
data[j + 1] = data[j]; // 后移
}
data[j + 1] = temp;
}
}
return data;
}
四.时间复杂度和稳定性
- 最好时间复杂度
- 若文件的初始状态是正序的,所需的关键字比较次数C和记录移动次数M。
- Cmin
=n-1=0(n)
- Mmin
=0
- 直接插入排序最好的时间复杂度为O(n)
- 最坏时间复杂度
- 若初始文件是反序的,所需的关键字比较次数C和记录移动次数M。
- Cmax
=(n+2)(n-1)/2=O(n2
)
- Mmax
=(n-1)(n+4)/2=O(n2
)
- 直接插入排序的最坏时间复杂度为O(n2
)
- 平均时间复杂度
- O(n2
)
- 算法的空间复杂度:算法所需的辅助空间是一个监视哨,辅助空间复杂度S(n)=O(1)。是一个就地排序。
- 直接插入排序是稳定的。
分享到:
相关推荐
### 数据结构之直接插入排序详解 #### 一、引言 在计算机科学中,排序算法是数据处理中不可或缺的一部分,而直接插入排序是一种简单直观的排序方法。它的工作原理类似于我们手动排序一组卡片的方式——每次从未...
- **希尔排序**:改进的插入排序,通过增量序列对数据进行预排序,再进行直接插入排序,提高了效率。 - **堆排序**:通过构建堆结构,利用堆的性质进行排序,具有稳定的O(n log n)时间复杂度。 3. **C语言实现**...
《数据结构算法与应用-C++语言描述》这本书,由Sahni著,旨在帮助读者深入理解这些核心概念,并通过C++实践来提升技能。 本书可能涵盖了以下几个主要的知识点: 1. **基础数据结构**:包括数组、链表、栈、队列、...
直接插入排序是一种简单直观的排序算法,它是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。在数据量较小或者部分数据已经有序的情况下,直接插入排序能展现出较好的效率。...
本资源为数据结构与算法第三章(排序)的作业程序代码。包含以下的两个程序: 3.4 rk作哨兵直接插入排序 3.8 双向起泡 北工大电控学院《数据结构与算法》课程的其它章节程序实验及作业代码亦已在本站上传,需要的...
在编程领域,数据结构与算法是核心组成部分,它们直接影响到程序的效率和性能。Java作为广泛应用的编程语言,其在实现数据结构和算法时有着丰富的库支持和优秀的可读性。下面将对标题和描述中提到的一些关键知识点...
总结来说,"数据结构与算法学习资料"是计算机科学的核心组成部分,涵盖了各种数据组织方式和解决问题的方法。通过深入学习,我们可以更好地理解和解决实际问题,提升编程技能,为未来的软件开发和系统设计打下坚实...
配合《数据结构与算法分析C++描述第三版》答案.pdf,读者可以检验自己的学习效果,加深对每个知识点的理解。通过阅读和实践,你可以建立起坚实的数据结构和算法基础,这对任何IT专业人士来说都是至关重要的。
直接插入排序是一种基础且常用的排序算法,其工作原理可以形象地比喻为打扑克牌时将新拿到的牌插入到已排序好的牌堆中的过程。在计算机科学中,这个过程...在学习排序算法时,理解和掌握直接插入排序是非常重要的一步。
直接插入排序是一种简单的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间),...
数据结构与算法是计算机科学的基础,内部排序是其核心部分之一。排序是将无序的数据序列按照特定的顺序排列的过程,对于计算机处理大量数据时至关重要。以下是对内部排序的详细分析: 1. **排序的定义**: 排序是...
《数据结构与算法分析C++描述_第三版》是一本深度探讨数据结构和算法的权威书籍,主要针对C++编程语言。这本书的核心在于提供清晰、深入的解释,帮助读者理解和实现各种常用的数据结构(如数组、链表、树、图等)...
- 学习并掌握多种排序算法(包括直接插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序等),同时理解它们的性能特点。 #### 实验环境配置 - **硬件需求**:一台装有Windows操作系统的计算机。 - **...
4. **实践应用**:学习这些数据结构和算法对于软件开发非常重要,因为它们直接影响到程序的性能、可读性和可维护性。例如,了解哪种数据结构适合哪种场景,何时应该使用特定的排序算法,以及如何利用C++的特性来优化...
1. 直接插入排序:这是一种简单的排序算法,适合于小规模或者部分有序的数据。它的工作原理类似于打扑克时整理手牌,每次将一个待排序的元素插入到已排序序列的正确位置,直到所有元素都排序完毕。 2. 希尔排序:...
《数据结构与算法分析:C语言描述》是计算机科学领域一本极为重要的著作,它由Mark Allen Weiss撰写,中文版由知名译者翻译,为读者提供了深入理解数据结构和算法的宝贵资源。这本书以其清晰的C语言实现和详尽的分析...
直接插入排序是一种简单的排序算法,其基本思想是将待排序的数据逐个与已排序的部分进行比较,找到合适的位置插入。它的工作原理类似于我们日常生活中的整理扑克牌。在初始阶段,已排序部分只有第一个元素,然后...