快速排序和选择模版类

template<typename T>
void insert_sort(T *array,int start,int end)
{for (int i = start + 1; i < end + 1; ++i) {int j = i - 1 ;T key = array[i];while (j >= start &&  key < array[j]){array[j+1] = array[j];j--;}array[j+1] = key;}
}
template <typename T>
KeyValuePair partition(T *array,int start,int end ,const T key)
{KeyValuePair line(start-1,start-1);for (int i = start; i < end + 1; ++i) {if(array[i] < key){line.key++;line.value++;T temp = array[i];array[i] = array[line.value];array[line.value] = array[line.key];array[line.key] = temp;}else if(array[i] == key){line.value++;array[i] = array[line.value];array[line.value] = key;}}return line;
}
template<typename T>
T select(T*array,int start,int end,int index)
{if(start == end) return array[start];const int constant_num = 5;int remainder = (end - start + 1) % constant_num;int zero = remainder == 0 ? 0 : 1;int num = (end - start + 1) / constant_num + zero;T *median = new T[num];if(remainder){insert_sort<T>(array,start + (num - 1 ) * constant_num,start + (num - 1 ) * constant_num + remainder-1);median[num-1] = array[start + (num - 1 ) * constant_num + (remainder - 1)/2];}for (int i = 0; i < num - zero; ++i) {insert_sort<T>(array,start + i * constant_num,start + (i+1) * constant_num - 1);median[i] = array[start + i * constant_num + constant_num / 2];}T key = select<T>(median,0,num-1,num/2 + (num % 2 == 0 ? 0 : 1));delete[] median;//划分int middle = partition<T>(array,start,end,key).value;//递归求解int position = middle - start + 1;if(index == position){return  array[middle];}else if(index < position){return select<T>(array,start,middle-1,index);}else{return select<T>(array,middle + 1,end,index - position);}
}
template<typename T>
void quick_sort(T *array,int start,int end)
{if(start<end){T median = select<T>(array,start,end,(end - start + 1)/2 + (end - start + 1)%2);KeyValuePair middle_line = partition<T>(array,start,end,median);quick_sort<T>(array,start,middle_line.key);quick_sort<T>(array,middle_line.value + 1,end);}
}

KeyValuePair类链接

快速排序和选择模版类相关推荐

  1. spring入门(11)-spring与hibernate整合完成增删改查的操作(封装HibernateTemplate模版类对象)

    今天是spring的最后一节课,这节课老师讲了spring与hibernate整合完成增删改查的操作,这是很重要的一节课,这也是第一次真正的实现spring结合Hibernate和数据库连接上,下面是 ...

  2. lazada新手开店之后,怎样选择正确类目来发布产品?

    一.Lazada产品流量从何而来? 1.导航搜索 通过主页类目导航栏查找: ● Shop Categories(按类目购物) ● 选择一级主类目 ● 选择二级子类目 ● 引导至该子类目页面;可继续选择 ...

  3. php调用css类,php – 使用xpath选择css类

    我想写这个问题的规范答案,因为上面的答案有一个问题. 我们的问题 CSS选择器: .foo 将选择具有类foo的任何元素. 你如何在XPath中这样做? 虽然XPath比CSS更强大,但XPath没有 ...

  4. Java基类共同属性设置_多选择基类的访问属性-Java初学笔记

    多选择基类的访问属性 你现在知道在定义类的访间属性时可用的选择项,你希望使用这些类定义子类.你知道在类继承上这些属性所具有的效果,但是你如何决定到底应该使用哪一个呢? 这里没有死板和现成的规则,你选择 ...

  5. C++工作笔记-模版类要注意的地方(对比模版函数)

    指定了模版参数类型后,在编译的时候就会生成一个新的具体的类,然后用这个类构造对象.用<>来指定模版的类型 而函数模版就不是这样,他先调用函数,发现是什么类型再推到,而类是必须要指定的 所有 ...

  6. C++普通类继承模版类demo

    1.定义并继承一个模版类    template<typename T>   class Test : public T{ } 2.继承一个模版类    class  Subtest  : ...

  7. C++模版类List实现

    模版类即使用模版的泛型方式来编写类似链表的链式物理结构,这篇文章我是以动态数组的方式实现的,所以是List线性物理结构! 1.包含头文件 定义函数执行的正确与错误宏用来判断函数执行,其次在定义类型别名 ...

  8. 泛型模版类出现了LNK2019: 无法解析的外部符号错误

    我们在写程序的大部分时间都不会去考虑在已有的知识上出现的匮乏,前两天用C++写了一个顺序表,结果却不尽人意,这个或许是因为人生就是这样,在你已知的知识当中出现的知识漏洞你会很难发现,这里还是感谢一下s ...

  9. 选择设计类培训学校的那些事儿

    首先请读者认清一点,选择设计类培训学校那些事儿,而不是怎样选择好的设计类培训学校,因为这是造成培训学员选择障碍的根本所在,在帮助读者分析问题之前,先给大家普及一下目前培训行业的大概情况.目前设计类培训 ...

最新文章

  1. c语言课程设计学生籍贯信息记录簿,C语言课程设计 学生籍贯信息记录簿设计.doc...
  2. “数学不好,干啥都不行!”骨灰级程序员:其实你们都是瞎努力!
  3. Linux免密登陆(CentOS7.2为例)
  4. JSR338(Java Persistence)
  5. python~文件遍历命令:glob、os.walk
  6. 适合打游戏的计算机内存品牌型号,玩游戏电脑内存要多大合适?不同内存容量玩游戏区别实测...
  7. 无代码iVX编程实现简单魂斗罗
  8. dataguard从库数据库丢失恢复例子(模拟所有的控制文件)
  9. 基础编程题目集 7-3 逆序的三位数 (10 分)
  10. python比flask更好的框架_(入门篇)Python框架之FastAPI——一个比Flask和Tornado更高性能的API 框架...
  11. Android开发笔记(一百五十二)H5通过WebView上传图片
  12. ElasticSearch ---- 查询
  13. 聊聊Eureka Server的REST API
  14. iOS限制文本输入长度进阶之 一
  15. union all动态表_教你在Power BI中轻松制作动态RFM客户价值模型
  16. PLSQL使用相关详细配置
  17. 最新综述!NLP中的Transformer预训练模型
  18. Linkedin如何避免封号及如何高效管理领英账号
  19. 计算机中的ip地址是什么 ???
  20. 源代码 一对一交友源码,一对一聊天系统接口处置方案

热门文章

  1. LeetCode之字符串(C++)的切割简单实现
  2. C语言之struct A *b和struct A c区别
  3. 除掉字符串里面相同的字符
  4. windows下配置mysql主从复制_Windows下MySQL主从复制的配置方法
  5. html三列布局源码,HTML三列布局 - 黄柳淞的个人页面 - OSCHINA - 中文开源技术交流社区...
  6. python编程发展_编程的发展史及Python简介
  7. 令人难忘的初吻描写......
  8. 继Science发文后,Nature也发文评论曹雪涛“误用图片”调查结果
  9. 颜宁分享干货:给实验室博士的一些忠告
  10. 资料分享 | 数学建模竞赛备战大全