2011年9月16日

排序算法之 Slow Sort

摘要: Slow Sort (cpp_slow_sort.cc)================================================================================最好时间复杂度 O(nlogn)平均时间复杂度 O(nlogn)最坏时间复杂度 O(n^2)空间复杂度 O(n)是否稳定 是 Slow Sort是我自创的一种排序法,原理和也是使用折半查找的插入排序并减少调整位置所需的时间,与Library Sort不同的是我采用的是链式的方法,使用一个辅助next域支持原数组在内部进行交换排序,结构比Library Sort... 阅读全文

posted @ 2011-09-16 19:14 RichSelian 阅读(842) 评论(0) 推荐(0) 编辑

排序算法之 Library Sort

摘要: Library Sort (cpp_library_sort.cc)================================================================================最好时间复杂度 O(nlogn)平均时间复杂度 O(nlogn)最坏时间复杂度 O(n^2)空间复杂度 O(n)是否稳定 是 Library Sort基于折半查找的插入排序,插入时在元素附近空出一定位置,这样推入后移动元素的复杂度由原来的O(n)下降为平均O(1),于是整个算法的复杂度达到O(nlogn)。当输入正序或倒序时,插入点都在同一位置,“... 阅读全文

posted @ 2011-09-16 19:12 RichSelian 阅读(790) 评论(0) 推荐(0) 编辑

排序算法之 Smooth Sort

摘要: Smooth Sort (cpp_smooth_sort.cc)================================================================================最好时间复杂度 O(n)平均时间复杂度 O(nlogn)最坏时间复杂度 O(nlogn)空间复杂度 O(1)是否稳定 否 Smooth Sort基本思想和Heap Sort相同,但Smooth Sort使用的是一种由多个堆组成的优先队列,这种优先队列在取出最大元素后剩余元素可以就地调整成优先队列,所以Smooth Sort不用像Heap Sort那样反... 阅读全文

posted @ 2011-09-16 19:10 RichSelian 阅读(2146) 评论(0) 推荐(0) 编辑

排序算法之 Heap Sort

摘要: Heap Sort (cpp_heap_sort.cc)================================================================================最好时间复杂度 O(nlogn)平均时间复杂度 O(nlogn)最坏时间复杂度 O(nlogn)空间复杂度 O(1)是否稳定 否 Heap Sort利用的是二叉堆结构能在O(logn)时间内取出最大元素的特点,将所有元素构建成堆后依次取出完成排序。 经典的取出最大元素的算法是将最后一个元素放到根的位置然后向下调整,由于调整后的位置理论上还是接近堆底,所以这种... 阅读全文

posted @ 2011-09-16 19:08 RichSelian 阅读(320) 评论(0) 推荐(0) 编辑

排序算法之 Comb Sort

摘要: Comb Sort (cpp_comb_sort.cc)================================================================================最好时间复杂度 O(?)平均时间复杂度 O(?)最坏时间复杂度 O(?)空间复杂度 O(1)是否稳定 否 Comb Sort与Shell Sort的思想基本相同,不过使用的是变步长的冒泡排序。 Comb Sort的大部分特性和Shell Sort相同,也存在复杂度难以确定的问题。但是Comb Sort在比较数据的时候不像Shell Sort那样跳跃地进行比较... 阅读全文

posted @ 2011-09-16 19:05 RichSelian 阅读(610) 评论(0) 推荐(0) 编辑

排序算法之 Shell Sort

摘要: Shell Sort (cpp_shell_sort.cc)================================================================================最好时间复杂度 O(?)平均时间复杂度 O(?)最坏时间复杂度 O(?)空间复杂度 O(1)是否稳定 否 Shell Sort是变步长的插入排序,利用插入排序在数据基本有序时速度较快的特点,先用较大步长的插入排序使数据变得基本有序,再用小步长的插入排序完成整个排序过程。 Shell Sort的时间复杂度随着增量序列的改变而不同,要证明一个增量序列的时间复... 阅读全文

posted @ 2011-09-16 19:03 RichSelian 阅读(469) 评论(0) 推荐(0) 编辑

排序算法之 Inplace Merge Sort

摘要: Non-recursive Merge Sort (cpp_merge_sort.cc)================================================================================最好时间复杂度 O(nlogn)平均时间复杂度 O(nlogn)最坏时间复杂度 O(nlogn)空间复杂度 O(1)是否稳定 是 Inplace Merge Sort是自底向上归并排序的原地实现,通过一个精巧的原地Merge操作将归并排序的O(n)空间减小至O(1)。 原地Merge操作基于大量的Swap,所以该算法的时间效率... 阅读全文

posted @ 2011-09-16 19:00 RichSelian 阅读(1087) 评论(0) 推荐(0) 编辑

排序算法之 Non-recursive Merge Sort

摘要: Non-recursive Merge Sort (cpp_merge_sort.cc)================================================================================最好时间复杂度 O(nlogn)平均时间复杂度 O(nlogn)最坏时间复杂度 O(nlogn)空间复杂度 O(n)是否稳定 是 Non-recursive Merge Sort是归并排序的非递归(自底向上归并)实现,将序列视为长度为s的有序序列集合(初始时s=1),然后将有序序列两两进行Merge操作,得到长度为2s的有序序列... 阅读全文

posted @ 2011-09-16 18:57 RichSelian 阅读(649) 评论(0) 推荐(0) 编辑

排序算法之 Merge Sort

摘要: Merge Sort (cpp_cmerge_sort.cc)================================================================================最好时间复杂度 O(nlogn)平均时间复杂度 O(nlogn)最坏时间复杂度 O(nlogn)空间复杂度 O(n)是否稳定 是 Merge Sort是归并排序的递归(自顶向下)实现,将序列分为左右两个等长(或长度相差1)的子序列,首先对两个子序列进行递归操作使它们成为有序序列,然后对这两个有序子序列进行Merge操作,得到完整的已排序序列。 ... 阅读全文

posted @ 2011-09-16 18:55 RichSelian 阅读(369) 评论(1) 推荐(0) 编辑

排序算法之 Quick Sort

摘要: Quick Sort (cpp_quick_sort.cc)================================================================================最好时间复杂度 O(nlogn)平均时间复杂度 O(nlogn)最坏时间复杂度 O(n^2)空间复杂度 O(logn)是否稳定 否 Quick Sort基于分治法,每次在序列中选出一个元素作为划分点p,对序列进行一次扫描,将序列划分为:<(x<p),(x=p),(x>p)>这样的的形式,然后对左右两个集合进行递归处理直到排序完毕。 在快速排序中,... 阅读全文

posted @ 2011-09-16 18:51 RichSelian 阅读(409) 评论(0) 推荐(0) 编辑

导航