高速排序C++实现
//高速排序
#include<iostream>
#include<functional>
#include<Windows.h> using namespace std; void qksort(int* arr, int cnt)
{
function<int(int*, int, int)> getPivot = [&](int* arr, int left, int right)->int
{
int mid = (left + right) / 2;
if (arr[left] > arr[mid])
swap(arr[left], arr[mid]);
if (arr[left] > arr[right])
swap(arr[left], arr[right]);
if (arr[mid] > arr[right])
swap(arr[mid], arr[right]);
swap(arr[mid], arr[right - 1]);
return arr[right - 1];
}; function<void(int*, int, int)> insertSort = [&](int* arr, int begin, int end)
{
int i = 0, j = 0;
for (i = begin + 1; i <= end; i++)
{
int tmp = arr[i];
for (j = i; j > begin && arr[j - 1] > tmp; j--)
arr[j] = arr[j - 1];
arr[j] = tmp;
}
}; function<void(int*, int, int)> qk = [&](int* arr, int left, int right)
{
if (left + 9 <= right) //当数组元素大于等于10个的时候,我们用高速排序
{
int pivot = getPivot(arr, left, right);
int i = left;
int j = right - 1;
while (1)
{
while (arr[++i] < pivot){}
while (arr[--j] > pivot){}
if (i < j)
swap(arr[i], arr[j]);
else
break;
}
swap(arr[i], arr[right - 1]);
qk(arr, left, i - 1);
qk(arr, i + 1, right);
}
else //当数组元素小于10个的时候我们用插入排序
insertSort(arr, left, right);
}; qk(arr, 0, cnt - 1);
}; int main()
{
int arr[1000];
int tmp = -1; for (int i = 0; i < 500; i++)
{
if (i % 2)
arr[i] = i*tmp;
else
arr[i] = i;
}
for (int i = 500; i < 1000; i++)
{
if (i % 2)
arr[i] = i*tmp;
else
arr[i] = i;
} //我们能够对上面进行全不快排还是部分快排部分插入排序进行时间上的測试,理论上我们元素个数界限是10个,取十个在有些时候不一定是最佳的,可是能够避免一些有害的特殊情形
{
LARGE_INTEGER large_interger;
double dff;
__int64 c1, c2;
QueryPerformanceFrequency(&large_interger);
dff = large_interger.QuadPart;
QueryPerformanceCounter(&large_interger);
c1 = large_interger.QuadPart; qksort(arr, 1000); QueryPerformanceCounter(&large_interger);
c2 = large_interger.QuadPart;
printf("计时%lf毫秒\n", (c2 - c1) * 1000 / dff);
} for (auto i : arr)
cout << i << endl; cin.get();
return 0;
}
高速排序C++实现的更多相关文章
- 排序(5)---------高速排序(C语言实现)
继shell发明了shell排序过后呢,各位计算机界的大牛们又開始不爽了,为什么他能发明.我就不能发明呢.于是又有个哥们蹦出来了.哎...那么多排序,就木有一个排序是中国人发明的.顺便吐槽一下,一百年 ...
- 高速排序-c++(分别用数组和容器实现)
/********************************************************************** *版权全部 (C)2014, cheng yang. * ...
- 【从零学习经典算法系列】分治策略实例——高速排序(QuickSort)
在前面的博文(http://blog.csdn.net/jasonding1354/article/details/37736555)中介绍了作为分治策略的经典实例,即归并排序.并给出了递归形式和循环 ...
- 《算法导论》 — Chapter 7 高速排序
序 高速排序(QuickSort)也是一种排序算法,对包括n个数组的输入数组.最坏情况执行时间为O(n^2). 尽管这个最坏情况执行时间比較差.可是高速排序一般是用于排序的最佳有用选择.这是由于其平均 ...
- 经典排序算法 - 高速排序Quick sort
经典排序算法 - 高速排序Quick sort 原理,通过一趟扫描将要排序的数据切割成独立的两部分,当中一部分的全部数据都比另外一部分的全部数据都要小,然后再按此方法对这两部分数据分别进行高速排序,整 ...
- java:高速排序算法与冒泡排序算法
Java:高速排序算法与冒泡算法 首先看下,冒泡排序算法与高速排序算法的效率: 例如以下的是main方法: /** * * @Description: * @author:cuiyaon ...
- 高速排序,归并排序,堆排序python实现
高速排序的时间复杂度最好情况下为O(n*logn),最坏情况下为O(n^2),平均情况下为O(n*logn),是不稳定的排序 归并排序的时间复杂度最好情况下为O(n*logn),最坏情况下为O(n*l ...
- python高速排序
import random def rand(n): for i in range(n): yield random.randint(0,1000) #创建一个随机数列表 def createList ...
- 剑指offer 高速排序
高速排序一般的写法.教科书上非常具体,这里介绍作者的写法. 程序例如以下: #include<iostream> #include<stack> using namespace ...
随机推荐
- RabbitMQ集群使用Haproxy负载均衡
(1).下载 http://www.haproxy.org/#down (2).解压 tar -zxvf haproxy-1.5.18.tar.gz (3).安装 1).编译 make TARGET= ...
- How to become a successful bug bounty hunter
出处:https://www.hackerone.com/blog/become-a-successful-bug-bounty-hunter 如果你梦想成为赏金猎人,你的梦想就会成真 - 不要把你的 ...
- 记录自己对EventLoop和性能问题处理的一点心得【转】
转自:http://www.cnblogs.com/lanyuliuyun/p/4483384.html 1.EventLoop 这里说的EventLoop不是指某一个具体的库或是框架,而是指一种程序 ...
- 在 Linux 上找出并解决程序错误的主要方法【转】
转自:https://www.ibm.com/developerworks/cn/linux/sdk/l-debug/index.html 本文讨论了四种调试 Linux 程序的情况.在第 1 种情况 ...
- GaN助力运营商和基站OEM实现5G sub-6GHz和mmWave大规模MIMO
到2021年,估计全球会有更多的人拥有移动电话(55亿),将超过用上自来水的人数(53亿).与此同时,带宽紧张的视频应用将进一步增加对移动网络的需求,其会占移动流量的78%.使用大规模多输入多输出(M ...
- Owin中间件动手做
摘要:本文目的是了解Owin基本原理.讲述如何从控制台创建一个自宿主的OwinHost,然后再编写一两个中间件 准备工作 首先通过VisualStudio创建一个控制台应用 然后添加Owin的Nuge ...
- 点击超链接打开本地QQ
2014年6月4日 10:20:18 张志斌 这个功能实际上是属于腾讯的推广项目"一键加群"功能: http://qun.qq.com/join.html 用户必须有自己的群,登录 ...
- 局域网搭建https局域网
局域网搭建https局域网 1.使用tomcat作为服务器搭建局域网访问https 需要使用java jdk\bin下的keytool.exe来创建证书 使用命令:keytool -genkenpai ...
- PHP跨域访问
1.允许所有域名访问 header('Access-Control-Allow-Origin: *'); 2.允许单个域名访问 header('Access-Control-Allow-Origin: ...
- MapReduce原理2
MapReduce的shuffle机制 1.概述 mapreduce中,map阶段处理的数据如何传递给reduce阶段,是mapreduce框架中最关键的一个流程,这个流程就叫shuffle: shu ...