数据结构导论——排序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xsh096011/article/details/81738183

插入排序

直接插入排序

依次将每个记录插入到一个已经排好序的有序表中;类比图书馆整理书的过程;
时间复杂度O(n²);空间复杂度为O(l);算法稳定;
不适用于排序记录数量很大的情况;

交换排序

冒泡排序

类比水中冒泡;
时间复杂度为O(n²);算法稳定;

快速排序

平均时间性能:快速排序方法最佳;时间复杂度为O(nlog2n);对拍好序列的输入序列,算法效率较低;近似于O(n²);算法不稳定;

选择排序

直接选择排序

在第i次选择操作中,通过n-1次键值间比较,从n-i+1个记录中选出键值最小的记录,并和第i(1<=i<=n-1)个记录交换;
时间复杂度为O(n²);算法不稳定;不适于n较大的情况;

堆排序

两种方式:最大堆和最小堆;
堆排序平均时间为O(n log2n);最坏的情况下也是O(n log2n);不稳定;仅需要一个辅助存储空间(用来记录大小)

归并排序

二路归并

将两个有序表合并成一个有序表;n;n/2;n/4;两两合并最终合并成1个有序序列;
时间复杂度为O( n log2n);稳定;所需辅助存储量较多;


排序分析

时间复杂度分析:
直接插入、冒泡、直接选择算法简单的时间复杂度为O(n²);
快速排序、堆排序、二路归并排序算法相对复杂的时间复杂度为O(n log2n);

稳定性分析:
快速排序、直接选择排序:有可能出现45、_45;_45、45的情况,算法不稳定;
堆排序:树形图可分析出不稳定;
直接插入、冒泡、二路归并图改动不大、稳定有规律的算法稳定;

辅助存储量分析:
二路归并所需最多;堆排序只需要一个辅助存储量;

n较小时选择简单的排序算法;n较大且无序时选择时间复杂度较低的算法;(O(n log2n))时间复杂度低;

猜你喜欢

转载自blog.csdn.net/xsh096011/article/details/81738183
今日推荐