结论:
排序方法 平均时间 最坏时间 辅助存储
简单排序 O(n2) O(n2) O(1)
快速排序 O(nlogn) O(n2) O(logn)
堆排序 O(nlogn) O(nlogn) O(1)
归并排序 O(nlogn) O(nlogn) O(n)
基数排序 O(d(n+rd)) O(d(n+rd)) O(rd)
另外:直接插入排序、冒泡排序为简单排序,希尔排序(不稳定)
一、时间性能
按平均的时间性能来分,有三类排序方法:
时间复杂度为O(nlogn)的方法有:快速排序、堆排序和归并排序,其中以快速排序为最好;
时间复杂度为O(n2)的有:直接插入排序、起泡排序和简单选择排序,其中以直接插入为
最好,特别是对那些对关键字近似有序的记录序列尤为如此;
时间复杂度为O(n)的排序方法只有,基数排序。
当待排记录序列按关键字顺序有序时,直接插入排序和起泡排序能达到O(n)的时间复杂
度;而对于快速排序而言,这是最不好的情况,此时的时间性能蜕化为O(n2),因此是应
该尽量避免的情况。
简单选择排序、堆排序和归并排序的时间性能不随记录序列中关键字的分布而改变。
二、空间性能
指的是排序过程中所需的辅助空间大小。
1. 所有的简单排序方法(包括:直接插入、起泡和简单选择)和堆排序的空间复杂度为O(1);
2. 快速排序为O(logn),为栈所需的辅助空间;
3. 归并排序所需辅助空间最多,其空间复杂度为O(n);
4.链式基数排序需附设队列首尾指针,则空间复杂度为O(rd)。
三、排序方法的稳定性能
1. 稳定的排序方法指的是,对于两个关键字相等的记录,它们在序列中的相对位置,在
排序之前和经过排序之后,没有改变。
2. 当对多关键字的记录序列进行LSD方法排序时,必须采用稳定的排序方法。
3. 对于不稳定的排序方法,只要能举出一个实例说明即可。
4. 希尔排序、快速排序和堆排序是不稳定的排序方法
四、应用
归并排序很难用于主存排序,主要问题在于:合并两个排序的表需要线性附加内存,在整个算法中还要花费将数据拷贝到临时数组再拷贝回来这样一些附加的工作,其结果严重放慢了排序的速度。
对于重要的内部排序应用而言,应选择快速排序。
快排和归并排序都是分治的递归算法。
对于很小的数组(N<=20),快速排序不如插入排序好。
分享到:
相关推荐
堆排序是基于二叉堆的排序方法。在给定的代码中,`heapsort()`函数展示了如何构建和维护一个最大堆,然后通过交换堆顶元素和末尾元素,以及重新调整堆来实现排序。堆排序的过程包括两个阶段:建立堆和堆调整。`sift...
本篇总结主要围绕Java集合的排序方法进行详细阐述,共计13页,涵盖了多种排序策略和技术。下面我们将深入探讨这些关键知识点。 1. 集合接口与实现 在Java中,集合主要分为两种类型:List和Set。List接口(如...
这篇文档总结了五种主要的内部排序方法,包括插入类排序、交换类排序、选择类排序、归并排序和分配类排序。在这篇文章中,我们将详细探讨插入类排序,因为它是最基础且易于理解的排序技术之一。 插入类排序的核心...
这种排序方法是稳定的,即相同元素的相对顺序在排序后不会改变。直接插入排序的时间复杂度在最坏的情况下为O(n^2),但当数据接近有序时,性能接近线性O(n)。 希尔排序,又称Shell排序,是由Donald Shell于1959年...
本文将详细讨论并比较三种常见的排序方法:交换排序法、插入排序法和选择排序法。 **交换排序法**,其中最典型的就是冒泡排序和快速排序。冒泡排序通过不断交换相邻的错误顺序元素来实现排序,其核心思想是每次遍历...
主要的排序方法可以归纳为五类:插入类排序、交换类排序、选择类排序、归并排序和分配类排序。这些方法各有特点,适用于不同的场景和数据类型。 **插入类排序**的基本思路是在已排序的部分序列中,逐个将未排序的...
本资料集“js代码-常用排序方法总结”旨在全面介绍JavaScript中的各种排序算法,帮助开发者更好地理解和运用这些方法。 首先,最基本的排序方法是`Array.prototype.sort()`。这个内置函数可以接受一个比较函数作为...
总结各类排序方法。排序问题一直是计算机技术研究的重要问题,排序算法的好坏直接影响程序的执行速度和辅助存储空间的占有量。此代码将详细分析常见的各种排序算法,并从时间复杂度、空间复杂度、适用情况等多个方面...
直接插入排序是最简单的插入排序方法,其基本思想是把待排序的记录插入到已排好序的有序表中,从而得到一个新的、记录数增加1的有序表。 直接插入排序的C#实现代码如下: ```csharp public static void InsertSort...
对冒泡排序,直接插入排序,简单选择排序,快速排序,希尔排序,堆排序这六种常用的内排序方法的掌握,通过对各种排序算法的分析,对其关键字的比较次数和移动次数进行分析,运用数据结构所学的知识将其用程序实现。
### 字符串排序方法 在JavaScript以及其他的编程语言中,字符串排序是一个常见的需求。无论是对字符串数组进行排序还是对特定的字符串内部字符进行排序,掌握正确的排序方法对于开发者来说至关重要。 #### 标题:...
在本文中,我们将详细介绍八大排序方法,包括直接插入排序、希尔排序、简单选择排序、堆排序、冒泡排序、快速排序、归并排序和基数排序。 1. 直接插入排序 直接插入排序是一种简单的排序算法,其基本思想是将一个...
排序算法是计算机科学中的基础概念,用于组织和整理数据,使其按照特定顺序排列。以下是对几种常见排序算法的详细说明: 1. 插入排序: ...理解这些算法的优缺点可以帮助我们选择最适合特定情境的排序方法。
排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算法可以节省大量的资源。在各个领域中考虑到数据的各种限制和规范,要得到一个符合实际...
以下是对PHP数组排序方法的详细说明: 1. **sort()**:这个函数对数组进行升序排序,会删除原有的键名并为数组元素赋予新的键名。...记得在处理数组时,根据实际需求选择相应的排序方法,确保数据按照预期的方式排列。
本文主要总结和比较了九种常见的排序算法:快速排序、归并排序、堆排序、Shell排序、插入排序、冒泡排序、交换排序、选择排序以及基数排序。 1. **快速排序**:快速排序是一种基于分治思想的高效排序算法,由C.A.R....