//高速排序
#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++实现的更多相关文章

  1. 排序(5)---------高速排序(C语言实现)

    继shell发明了shell排序过后呢,各位计算机界的大牛们又開始不爽了,为什么他能发明.我就不能发明呢.于是又有个哥们蹦出来了.哎...那么多排序,就木有一个排序是中国人发明的.顺便吐槽一下,一百年 ...

  2. 高速排序-c++(分别用数组和容器实现)

    /********************************************************************** *版权全部 (C)2014, cheng yang. * ...

  3. 【从零学习经典算法系列】分治策略实例——高速排序(QuickSort)

    在前面的博文(http://blog.csdn.net/jasonding1354/article/details/37736555)中介绍了作为分治策略的经典实例,即归并排序.并给出了递归形式和循环 ...

  4. 《算法导论》 — Chapter 7 高速排序

    序 高速排序(QuickSort)也是一种排序算法,对包括n个数组的输入数组.最坏情况执行时间为O(n^2). 尽管这个最坏情况执行时间比較差.可是高速排序一般是用于排序的最佳有用选择.这是由于其平均 ...

  5. 经典排序算法 - 高速排序Quick sort

    经典排序算法 - 高速排序Quick sort 原理,通过一趟扫描将要排序的数据切割成独立的两部分,当中一部分的全部数据都比另外一部分的全部数据都要小,然后再按此方法对这两部分数据分别进行高速排序,整 ...

  6. java:高速排序算法与冒泡排序算法

     Java:高速排序算法与冒泡算法 首先看下,冒泡排序算法与高速排序算法的效率: 例如以下的是main方法: /**   *  * @Description:  * @author:cuiyaon ...

  7. 高速排序,归并排序,堆排序python实现

    高速排序的时间复杂度最好情况下为O(n*logn),最坏情况下为O(n^2),平均情况下为O(n*logn),是不稳定的排序 归并排序的时间复杂度最好情况下为O(n*logn),最坏情况下为O(n*l ...

  8. python高速排序

    import random def rand(n): for i in range(n): yield random.randint(0,1000) #创建一个随机数列表 def createList ...

  9. 剑指offer 高速排序

    高速排序一般的写法.教科书上非常具体,这里介绍作者的写法. 程序例如以下: #include<iostream> #include<stack> using namespace ...

随机推荐

  1. blog迁移

    blog迁移到: https://github.com/for-firecat/

  2. 字符串格式化(百分号&format)

    字符串格式化 Python的字符串格式化有两种方式: 百分号方式.format方式 百分号方式: %[(name)][flags][width].[precision]typecode [  ]:表示 ...

  3. Linux内核启动流程分析(一)【转】

    转自:http://blog.chinaunix.net/uid-25909619-id-3380535.html 很久以前分析的,一直在电脑的一个角落,今天发现贴出来和大家分享下.由于是word直接 ...

  4. 014_mac下的端口查看

    一. 使用netstat去过滤listen效果不怎么理想. $ netstat -an|grep -i --color "listen" tcp6 0 0 ::1.5601 *.* ...

  5. 点击超链接打开本地QQ

    2014年6月4日 10:20:18 张志斌 这个功能实际上是属于腾讯的推广项目"一键加群"功能: http://qun.qq.com/join.html 用户必须有自己的群,登录 ...

  6. nginx:在centos中自启动

    参考网址:http://www.jb51.net/article/120545.htm # vi /etc/init.d/nginx #!/bin/sh # Name:nginx4comex # ng ...

  7. .NetCore生产环境下构建Consul(单个DC数据中心)的服务器健康检查

    下载最新的consul程序 consul 启动方式有两种 server 和client 默认是client 如果你不需要记录数据可以用 consul agent -dev 来启动 consul age ...

  8. IntelliJ IDEA快捷键:Shift+Esc

    Shift+Esc moves the focus to the editor and also hides the current (or last active) tool window. 将焦点 ...

  9. Android Studio 入门级教程(二):新建一个属于自己的工程并安装Genymotion模拟器

    声明 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4392611.html [系列] Andr ...

  10. Mysql报Cannot load from mysql.proc. The table is probably corrupted

    1548-Cannot load from mysql.proc. The table is probably corrupted http://bugs.mysql.com/bug.php?id=5 ...