程序的灵魂----算法(二)

来源:互联网 发布:英雄杀mac客户端 编辑:程序博客网 时间:2024/05/16 11:33

4、快速排序算法

(1)算法描述

从待排序序列中任意挑选一个元素,作为基准

将所有小于基准的元素放在基准之前,大于基准的元素放在基准之后,等于基准的元素放在基准之前或之后,这个过程称为分组

以递归的方式,分别对基准之前和基准之后的分组继续进行分组,知道每个分组内的元素个数不多于 1 个为止

(2)算法评价

平均时间复杂度:O(NlogN)

非稳定排序

若每次都能均匀分组,则排序速度最快

(3)快速排序算法实现

编程灵魂——算法(二)

编程灵魂——算法(二)

(4)快速排序说明

编程灵魂——算法(二)

5、归并排序算法

(1)算法描述

将待排序序列从中间划分为两个相等的子序列

以递归的方式分别对两个子序列进行排序

将两个有序的子序列合并成完整的序列

有序合并:

分配合并序列,其大小为两个有序序列大小之和

设定两个指针,分别指向两个有序序列的首元素

比较指针目标,娇笑着进入合并序列,指针后移

重复步骤3,直到某一指针到达序列末尾

将另一序列的剩余元素直接复制到合并序列末尾

(2)算法评价

平均时间复杂度:O(2NlogN)

稳定排序

对数据的有序性不敏感

非就地排序,需要辅助空间,不适合处理海量数据

(3)归并排序算法实现

编程灵魂——算法(二)

编程灵魂——算法(二)

(4)归并排序说明

编程灵魂——算法(二)