博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
高速排序C++实现
阅读量:6224 次
发布时间:2019-06-21

本文共 1870 字,大约阅读时间需要 6 分钟。

//高速排序#include
#include
#include
using namespace std;void qksort(int* arr, int cnt){ function
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
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
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;}

转载地址:http://uayna.baihongyu.com/

你可能感兴趣的文章
关于 Windows 7 的 200M 引导卷
查看>>
项目经理之初为项目经理
查看>>
C语言结构指针传递结构内容
查看>>
Python过渡性模块重载(递归重载模块)
查看>>
mysql错误信息的利用
查看>>
MyEclipse启动失败现象以及解决办法
查看>>
Vmware vSphere常见问题汇总(四)
查看>>
反编译Silverlight项目
查看>>
Serving websites from svn checkout considered harmful
查看>>
迁移SVN注意事项及操作方法
查看>>
linux 的GPT分区
查看>>
getRealPath()和getContextPath()的区别
查看>>
浅析:AD组添加成员后为何客户端要注销?
查看>>
System Center Data Protection Manager 2007补助说明
查看>>
Fortune 500市场占有率分析:Compute、CDN、DNS
查看>>
RHCE 学习笔记(33) - Postfix
查看>>
Windows Server群集感知更新(CAU)-上
查看>>
LVM磁盘管理技术案例讲解
查看>>
SCCM 2012系列13 操作系统播发②
查看>>
Memcached 分布式缓存系统部署与调试
查看>>