当前位置:   article > 正文

八种基本排序的含图详解_需要从一个文件里面读取一百万个32位整数,排序后输出到文件,程序运行在64位pc上。

需要从一个文件里面读取一百万个32位整数,排序后输出到文件,程序运行在64位pc上。


排序的概念

排序:
所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。

稳定性:
假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。

内部排序: 数据元素全部放在内存中的排序。
外部排序: 数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。

八种基本排序的对比:

排序方法平均情况最好情况最坏情况辅助空间稳定性
冒泡排序O(n^2)O(n)O(n^2)O(1)稳定
选择排序O(n^2)O(n^2)O(n^2)O(1)不稳定
插入排序O(n^2)O(n)O(n^2)O(1)稳定
希尔排序O(nlogn)~O(n^2)O(n^1.3)O(n^2)O(1)不稳定
堆排序O(nlogn)O(nlogn)O(nlogn)O(1)不稳定
归并排序O(nlogn)O(nlogn)O(nlogn)O(n)稳定
快速排序O(nlogn)O(nlogn)O(n^2)O(logn)~O(n)不稳定
基数排序O(d(r+n))O(d(n+rd))O(d(r+n))O(n+rd)稳定

注:基数排序的复杂度中,r代表关键字的基数,d代表位的长度,n代表关键字的个数

在基数排序中排列数组各位的运行时间为O(n+r)

各种排序的适用场景:

  • 大多数情况 (包含大量的重复元素) ------ 快速排序
  • 大部分数据离他正确的位置很近,近乎有序的 ------ 插入排序
  • 数据的取值范围有限,如:学生成绩排序 ------ 计数排序
  • 稳定的排序(数据使用链表存储)------ 归并排序
  • 数据量超级大,或内存太小 ------ 使用外排序

当输入规模n比较小的时候,应该使用选择排序或者插入排序插入排序通常会比选择排序少一些比较的次数,但是选择排序会比插入排序少挪动的次数);

详解八种排序的入口:

知识点习题

  1. 假设你只有100Mb的内存,需要对1Gb的数据进行排序,最合适的算法是?

A. 归并排序
B. 插入排序
C. 快速排序
D. 冒泡排序

正确答案

A

答案解析

内存装不下,所以只能从外部排序中选择,根据题设,可以得出用归并排序比较好

  • 先将1G分为10个100M(这里1G可理解近似等于1000M,方便讲解思路),分别加载10个100M数据到内存中,分别对其进行排序;
  • 然后10文件每个文件选取10M加载到内存进行排序,依次进行。

即先分解再归并的思路。

  1. 下列各排序法中,最坏情况下的时间复杂度最低的是( )

A. 希尔排序
B. 快速排序
C. 堆排序
D. 冒泡排序

正确答案: C

参考答案:

堆排序最坏情况时间下的时间复杂度为 O(nlog2n) ;希尔排序最坏情况时间下的时间复杂度为 O(n1.5) ;快速排序、冒泡排序最坏情况时间下的时间复杂度为 O(n2) 。

  1. 以下排序方式中占用O(n)辅助存储空间的是

A. 简单排序
B. 快速排序
C. 堆排序
D. 归并排序

正确答案: D

答案解析:

归并排序在归并过程中需要与原始序列相等的存储空间O(n)用于存放归并结果:
递归实现的归并排序还需考虑深度为log2n的栈空间,因此空间复杂度为O(n+log2n);
而非递归实现的归并排序避免了递归时深度为log2n的栈空间,因此空间复杂度为O(n)。
归并排序是所有排序中占用内存最多,但是效率比较高且稳定的算法,即牺牲内存提高了效率。

  1. 有一项考试的成绩,目前是按照完成时间进行升序排列的,需要按照考试成绩进行排序,成绩高的排在前面,如果成绩相同,则完成时间短的排在前面。以上场景适合采用下列哪些排序算法?

A.插入排序 B.快速排序 C.堆排序 D.冒泡排序

正确答案: A,D

答案解析:

本题实际考察哪种排序算法是稳定的,插入、冒泡是稳定的,快速和堆是不稳定的。

  1. 需要从一个文件里面读取一百万个32位整数,排序后输出到文件,程序运行在64位PC上。
    整数数值范围在0到500之间。程序的内存限制是2K,要求1秒内出结果。请选择一种高效可行的排序算法。

A. 希尔排序法
B. 冒泡排序法
C. 计数排序
D. 快速排序

正确答案: C

答案解析:

计数排序,这种排序算法不是基于元素比较,而是利用数组下标来确定元素的正确位置。
它适用于一定范围的整数排序。在取值范围不是很大的情况下,它的性能在某些情况甚至快过那些O(nlogn)的排序,例如快速排序、归并排序。


不论是难还是简单,自己上手多写几遍,都是可以掌握的排序算法。一起加油!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/759852
推荐阅读
相关标签
  

闽ICP备14008679号