排序算法学习(2)

来源:互联网 发布:模拟学生选课java代码 编辑:程序博客网 时间:2024/06/01 10:46

1、       堆排序每趟总能选出一个最大值或者最小值位于根结点。

冒泡排序总是两两比较选出一个最小值位于数组前面。(第一趟排序后最大值会在最后面,第二趟次最大值在次最后面)

 

选择排序(第一趟排序之后最小值会在最前面,第二趟排序会在次前面)

 

快排选出的枢轴在一趟排序中就位于最终的位置。(以一个值为分界点)

 

直接插入排序不一定位于最终的位置,因为不确定后面插入的元素对于前面的元素是否有影响。(特征第一趟排序范围为0~1,前一个数比后一个小,第二趟排序范围0~2,前三个数从小到大排列)

 

2、       关键字比较的次数与记录的初始排列次序无关的是:选择排序(每一趟从待排序的数据元素中选择最小(最大)的一个元素,顺序放在已排好序的数列最后,直到全部待排序的数据元素排完。可以看到,每次都是遍历一遍剩下要排序的部分,找出其最大值或最小值。所以关键码比较次数与记录的初始排列无关)

有关的是希尔排序、冒泡排序、直接插入排序、归并排序

 

3、       基本有序情况下对插入排序是最好的。

4、       归并排序和输入无关,线性对数级别。

逆序是插入的最坏情况。

冒泡和选择输入无关。

5、       快排的平均时间复杂性为O(nlogn),平均空间复杂性为O(log n)


(自己参考《妙趣横生的算法》还有点击打开链接所)

排序算法平均时间最坏情况空间需求稳定性直接插入排序n^2n^21稳定希尔排序n^1.5n^21不稳定冒泡排序n^2n^21稳定快排nlognn^2logn不稳定简单选择排序n^2n^21不稳定堆排序nlognnlogn1不稳定归并排序nlognnlogn1稳定基数排序d(r+n)d(r+n)rd+n稳定

原创粉丝点击