在路上

不是专业,只会通俗

导航

2013年1月16日 #

排序算法_堆排序

摘要: 一、什么是堆 堆可以视为一棵完全的二叉树,完全二叉树的一个“优秀”的性质是,除了最底层之外,每一层都是满的,这使得堆可以利用数组来表示,每一个结点对应数组中的一个元素. 数组与堆之间的关系: 父节点i的左子节点在位置 (2*i+1);父节点i的右子节点在位置 (2*i+2);子节点i的父节点在位置 [i/2];二、分类 最大堆:子结点的键值或索引总是小于它的父节点。 最小堆:子结点的键值或索引总是大于它的父节点。 三、算法描述堆排序就是把堆顶的最大数取出。将剩余的堆继续调整为最大堆。再次将堆顶的最大数取出,直到剩余数只有一个时结束。四、性能描述 数据结... 阅读全文

posted @ 2013-01-16 19:00 OnRoad_ 阅读(573) 评论(0) 推荐(0) 编辑

排序算法_选择排序

摘要: 一、算法描述:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。二、图示 三、性能描述 数据结构 :数组 最差时间复杂度 :O(n2) 最优时间复杂度 :O(n2) 平均时间复杂度 :O(n2) 最差空间复杂度 :О(n)四、总结 已经有序,交换0次;最坏情况是,逆序,交换n-1次。 比冒泡排序快。五、C语言实现代码View Code 1 void select_sort(int *a, int n) 2 { 3 register int... 阅读全文

posted @ 2013-01-16 17:55 OnRoad_ 阅读(227) 评论(0) 推荐(0) 编辑

排序算法_快速排序

摘要: 一、算法描述: 快速排序采用一种“分而治之、各个击破”的观念。从数列中挑出一个元素,称为 "基准"(pivot),重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。二、图示 三、性能描述 数据结构 :数组 链表 最差时间复杂度 :O(n2) 最优时间复杂度 :O(nlogn) 平均时间复杂度 :O(nlogn) 最差空间复杂度 :根据实现... 阅读全文

posted @ 2013-01-16 17:40 OnRoad_ 阅读(372) 评论(0) 推荐(0) 编辑

排序算法_冒泡排序

摘要: 一、算法描述:比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。二、图示 三、性能描述 数据结构 :数组 最差时间复杂度 :O(n2) 最优时间复杂度 :O(n) 平均时间复杂度 :O(n2) 最差空间复杂度 :总共O(n),需要辅助空间O(n)四、总结 效率低,打死也不用。仅作学生入门算法。五、C语言实现代码View Code 1 #incl... 阅读全文

posted @ 2013-01-16 17:10 OnRoad_ 阅读(478) 评论(0) 推荐(0) 编辑