摘要: 平均时间O(NlogN),最坏O(N^2)主要过程四步:1 如果S中元素为1 或者 0 ,直接返回2 取S中的任一元素v,称为 枢纽元3 将集合按照 枢纽元大小 分成两个集合4 两个子集合递归调用2 - 3选取枢纽元方法:1错误方法:直接选取第一个2安全方法: 随即选取一个枢纽元3三数中值分割法:选取数组的中值主要代码: 1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 template <typename Comparable> 5 void quicksort( vect 阅读全文
posted @ 2012-09-27 20:53 xingoo 阅读(531) 评论(0) 推荐(0)
摘要: 采用分治的思想 以O(NlogN)最坏的情形运行时间运行如果对merge的每个递归调用都采用局部声明一个临时数组,那么在任一时刻就可能有logN个临时数组处在活动期代码如下: 1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 template <typename Comparable> 5 void mergeSort(vector<Comparable> & a) 6 { 7 vector<Comparable> tmpArray(a.siz 阅读全文
posted @ 2012-09-27 19:34 xingoo 阅读(348) 评论(0) 推荐(0)
摘要: 说白了,也就是大堆,或者小堆,通过删掉堆顶点,然后存入数组,来实现排序:第一阶段:构建堆最多用2N次比较第二阶段:第i次deleteMax最多用到2【logi】次比较,总数最多2NlogN-O(N)次比较代码: 1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 template <typename Comparable> 5 void heapsort(vector<Comparable> & a) 6 { 7 for(int i = a.size()/2 阅读全文
posted @ 2012-09-27 16:18 xingoo 阅读(317) 评论(0) 推荐(0)
摘要: 使用希尔增量时排序的最坏为:O(n^2);代码如下: 1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 template <typename Comparable> 5 void shellsort(vector<Comparable> & a) 6 { 7 for(int gap = a.size()/2; gap > 0; gap /= 2) 8 for(int i = gap; i < a.size() ; i++) 9 {10 Comp 阅读全文
posted @ 2012-09-27 15:20 xingoo 阅读(329) 评论(0) 推荐(0)