软件评测师写作专栏之常见的排序算法18

各位学员大家好,大家在学习程序设计语言的时候,常见的排序算法有八种,这几年考试中基本上都会出题。为了让大家快速掌握这方面的知识点,接下来就带领大家一起来学习一下!

例题:通过设置基准(枢轴)元素将待排序的序列划分为两个子序列,使得其一个子序列的元素均不大于基准元素,另一个子序列的元素均不小于基准元素,然后再分别对两个子序列继续递归地进行相同思路的排序处理,这种排序方法称为( )。

A、快速排序   

B、冒泡排序   

C、简单选择排序   

D、归并排序

【昊洋详解】:本题考查常见的排序方法的基础知识。

常见的排序算法,我们考试主要涉及到8种,我们先列举如下:

直接插入排序:算法是基于某序列已经有序排列的情况下,通过一次插入一个元素的方式按照原有排序方式增加元素。每一趟将一个待排序的记录,按其关键字的大小插入到已经排好序的一组记录的适当位置上,直到所有待排序记录全部插入为止。

希尔排序(shell排序):是插入排序的一种又称“缩小增量排序”,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因 D.L.Shell 于 1959 年提出而得名。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序。随着增量逐渐减少,每组包含的关键词越来越多,当增量减至 1 时,整个文件恰被分成一组,算法便终止。

简单选择排序(直接选择排序):首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

堆排序:利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序的基本思想是:将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行,便能得到一个有序序列了。

冒泡排序:基本思想是迭代的对输入序列中的第一个元素到最后一个元素进行两两比较,当需要时交换这两个位置。该过程持续迭代直到在一次排序过程中不需要交换操作为止。

快速排序:首先在要排序的序列 a 中选取一个中轴值,而后将序列分成两个部分,其中左边的部分 b 中的元素均小于或者等于中轴值,右边的部分 c 的元素均大于或者等于中轴值,而后通过递归调用快速排序的过程分别对两个部分进行排序,最后将两部分产生的结果合并即可得到最后的排序序列。

归并排序:建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。归并排序速度仅次于快速排序,为稳定排序算法,一般用于对总体无序,但是各子项相对有序的数列。

基数排序:属于“分配式排序”,又称“桶子法”,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序。将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。

故该题目的正确答案为:A。

巩固练习题

(1)若要求对大小为n的数组进行排序的时间复杂度为O(nlog2n),且是稳定的(即如果待排序的序列中两个数据元素具有相同的值,在排序前后它们的相对位置不变),则可选择的排序方法是()。

A、快速排序 

B、归并排序   

C、堆排序   

D、冒泡排序


(2)某个应用中,需要对输入数据进行排序,输入数据序列基本有序(如输入为1,2,5,3,4,6,8,7)。在这种情况下,采用(1 )排序算法最好,时间复杂度为( 2 )。

1、A、插入     

B、归并        

C、堆          

D、快速

2、A、O(n)  

B、O(nlog2n)   

C、O(n2)   

D、O(n2log2n)

 

练习题参考答案

(1)解析:本题考查排序方法的基础知识。

常见的8种排序方法的基本情况如下图所示,要求大家记住它们的平均时间复杂度和稳定性,这是常考的知识点。


满足时间复杂度且是稳定的方法只有归并排序最符合。

故该题目的正确答案为:B。

(2)解析:本题考查常见的排序算法及其时间复杂度的基础知识。

当一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到插入排序法,各个排序算法的使用特性在例题中可以自行查看。插入排序算法的时间复杂度为O(n^2),是稳定的排序方法。常见的8种排序方法的情况如图所示,要求记住他们的平均时间复杂度和稳定性。


故该题目的第一空的正确答案为A,第二空的正确答案为C。


作者唯一官方个人微信公众号(昊洋与你一起成长):HYJY20180101

写于2020年9月6日

作者:昊洋讲师

版权所有,侵权必究

你可能感兴趣的:(软件评测师写作专栏之常见的排序算法18)