直接选择排序、堆排序、冒泡排序
一、选择排序
基本思想:
每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完
1.1 直接选择排序:
在元素集合array[i]--array[n - 1]中选择关键码最大(小)的数据元素
若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最后一个(第一个)元素交换在剩余的array[i]--array[n - 2](array[i + 1]--array[n - 1])集合中,重复上述步骤,直到集合剩余1个元素
1.2直接选择排序的实现(以升序为例)
思路:定义两个指针,分别指向最左边和最右边,然后每次遍历选出最小的放左边,选出最大的放右边
1.3直接选择排序的特性总结:
1. 直接选择排序思考非常好理解,但是效率不是很好。实际中很少使用
2. 时间复杂度:O(N^2)(无论最好还是最坏都是N^2)
3. 空间复杂度:O(1)
4. 稳定性:不稳定
1.4测试
1.5选择排序代码(升序)
2.堆排序
2.1堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。它是通过堆来进行选择数据。需要注意的是排升序要建大堆,排降序建小堆
2.2堆排序测试
2.3堆排序代码
直接选择排序(堆排序)的特性总结:
1. 堆排序使用堆来选数,效率就高了很多。
2. 时间复杂度:O(N * logN)
3. 空间复杂度:O(1)
4. 稳定性:不稳定
二、交换排序
基本思想:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动
1.冒泡排序
1.1冒泡排序测试
1.2冒泡排序代码
1.3冒泡排序的特性总结:
1. 冒泡排序是一种非常容易理解的排序
2. 时间复杂度:O(N^2)
3. 空间复杂度:O(1)
4. 稳定性:稳定
三种排序性能测试