快速排序(转自nocow)
来源:互联网 发布:mac的option是windows 编辑:程序博客网 时间:2024/06/05 00:59
收藏用
(言过其实了,C++ STL的Sort实现用的是Introsort,是快速排序的变种,主要是递归过深的时候自动转换为堆排或插入排序(是堆排还是插入排序还要视具体实现而定),可以保证最坏情况下还是O(nlogn),并且充分使用了尾递归优化(快排最后不是两个递归吗?最后一个递归可以不必真的递归,可以像gcd算法一样通过迭代参数来改善运行速度),STL快排可以经受任何实践的考验,而这段代码在最坏情况下还是O(n^2)) -- by 某奋战的OIer
此代码经过了一个多月的极致优化,测试。近乎完美。
本人觉得直接将template T直接换成int,long之类爽快些!
<template T>void sort(T a[],T st,T ed){ if(st<ed) //先设一个开关优化,会更快一些 { T tmp=a[st],i=st,j=ed; while(i<j) { while(a[j]>tmp&&i<j) --j; //C++在判断时,会打开编译开关,把a[j]与tmp放在前比较,这样会更快一些~~ if(i<j) a[i++]=a[j]; //ps:j-- ,i++(下行)比不了--j,++i快 while(a[i]<tmp&&i<j) ++i;//注意:这里用的不是">="或"<="而是">""<,事实证明,前者会增加交换的次数,做无用功~~~ if(i<j) a[j--]=a[i]; } //while a[i]=tmp; sort(a,st,i-1); sort(a,i+1,ed); } //if //这里不用return语句,会快一些} //由于以上的种种,程序在大的排序中(N>=10e6)优势越来越大--By LinuxKernel
0 0
- 快速排序(转自nocow)
- Treap入门(转自NOCOW)
- Gabow算法【转自nocow】
- 冒泡排序,快速排序,堆排序比较(转自:http://linpder.blog.163.com/blog/static/487641020082124532971/)
- 快速排序(C++自带)
- 快速排序-转自java数据结构与算法
- 快速排序(转载自脚本之家)
- 3种排序算法的可视化 冒泡排序 选择排序 快速排序 转自自己另一个帐号
- 我见过最通俗易懂的快速排序过程讲解,转自《坐在马桶上看算法:快速排序》
- 排序总结(快速排序)
- 排序(之快速排序)
- 快速排序(java排序)
- wikioi1076 排序(快速排序)
- 排序(5)快速排序
- c++排序(快速排序)
- 排序(二)快速排序
- 排序(3)--快速排序
- 排序(2)快速排序
- laravel5验证码
- JavaScript中的Array对象
- C++操作符的优先级 及其记忆方法
- Search for a Range
- 排序算法总结
- 快速排序(转自nocow)
- hdu4027——Can you answer these queries?(线段树+区间更新变形)
- NOIP2014提高组A.石头剪刀布(解题报告)
- 10进制转化为22进制
- 内存池、进程池、线程池介绍及线程池C++实现
- SQLite vs MySQL vs PostgreSQL
- POJ_1852_Ants
- Cows_poj3348_计算几何
- 爬山-编程题