处理海量数据的高级排序之——快速排序(C++)
代码实现
#include "stdafx.h"
#include <iostream>
#include <ctime>
using namespace std; int a[];
int tempA[]; #define BEGIN_RECORD \
{ \
clock_t ____temp_begin_time___; \
____temp_begin_time___=clock(); #define END_RECORD(dtime) \
dtime=float(clock()-____temp_begin_time___)/CLOCKS_PER_SEC;\
}
/*
快速排序(挖坑填数)
a - 待排序的数组
l - 排序区域的左边界
r - 排序区域的右边界
*/
void quickSort(int a[], int l, int r)
{
if(l < r) //快排每次把一个数排到正确位置,便以此点把原排序区域细分为两个更小的排序区域。通过不断递归,当新的排序区域右边界不再大于左边界时,说明已不需要排序,则停止递归,排序完毕
{
int i,j,x;
i = l;
j = r;
x = a[i]; //选取排序区域左边第一个数作为本次排序的数 while(i < j) //该循环可称之为换坑过程,i,j相当于左右两边坑的位置,当右边坑位置不再大于左边坑位置时(此时两坑位置必定相同),说明已比较到中点,结束换坑过程
{ while(i < j && x < a[j]) //从右向左找小于x的值
{
j--;
}
if(i < j) //找过后就将其换到左边第1个位置,下一次则填入左边第2个位置,以此类推
{
a[i++] = a[j];
}
while(i < j && x > a[i]) //从左向右找大于x的值
{
i++;
}
if(i < j) //找到后将其填入右边第1个位置,下一次则填入右边第2个位置,以此类推
{
a[j--] = a[i];
}
}
a[i] = x; //当换坑过程结束后,在i位置以左的值都小于x,i位置以右的值都大于x,说明x找到了正确的位置,将x值填入(填坑过程) //将x值位置以左,以右分为两个新的排序区域,重复换坑填坑的过程
quickSort(a, l, i-);
quickSort(a, i+, r);
}
} void printArray(int a[], int length)
{
cout << "数组内容:";
for(int i = ; i < length; i++)
{
if(i == )
cout << a[i];
else
cout << "," << a[i]; }
cout << endl;
} int _tmain(int argc, _TCHAR* argv[])
{
float tim; for (int i = ; i < ; i++)
{
a[i] = int(rand() % );
}
BEGIN_RECORD //printArray(a, sizeof(a)/sizeof(int));
quickSort(a, , sizeof(a)/sizeof(int) - );
//printArray(a, sizeof(a)/sizeof(int));
END_RECORD(tim) cout << "运行时间:" << tim << "s" << endl; system("pause");
return ;
}
处理海量数据的高级排序之——快速排序(C++)的更多相关文章
- 处理海量数据的高级排序之——希尔排序(C++)
希尔算法简介 ...
- 处理海量数据的高级排序之——归并排序(C++)
代码实现 ...
- 处理海量数据的高级排序之——堆排序(C++)
在面对大数据量的排序时(100W以上量级数据),通常用以下三种的排序方法效率最高O(nlogn):快速排序.归并排序,堆排序.在这个量级上,其他冒泡,选择,插入等简单排序已经无法胜任,效率极低,跟前面 ...
- javascript高级排序算法之快速排序(快排)
javascript高级排序算法之快速排序(快排)我们之前讨论了javascript基本排序算法 冒泡排序 选择排序 插入排序 简单复习: 冒泡排序: 比较相邻的两个元素,如果前一个比后一个大,则交换 ...
- javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法)
javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法) 一.快速排序算法 /* * 这个函数首先检查数组的长度是否为0.如果是,那么这个数组就不需要任何排序,函数直接返回. * ...
- 数据结构与算法之--高级排序:shell排序和快速排序
高级排序比简单排序要快的多,简单排序的时间复杂度是O(N^2),希尔(shell)排序大约是O(N*(logN)^2),而快速排序是O(N*logN). 说明:下面以int数组的从小到大排序为例. 希 ...
- javascript数据结构与算法--高级排序算法
javascript数据结构与算法--高级排序算法 高级排序算法是处理大型数据集的最高效排序算法,它是处理的数据集可以达到上百万个元素,而不仅仅是几百个或者几千个.现在我们来学习下2种高级排序算法-- ...
- Java数据结构和算法(九)——高级排序
春晚好看吗?不存在的!!! 在Java数据结构和算法(三)——冒泡.选择.插入排序算法中我们介绍了三种简单的排序算法,它们的时间复杂度大O表示法都是O(N2),如果数据量少,我们还能忍受,但是数据量大 ...
- Java数据结构和算法 - 高级排序
希尔排序 Q: 什么是希尔排序? A: 希尔排序因计算机科学家Donald L.Shell而得名,他在1959年发现了希尔排序算法. A: 希尔排序基于插入排序,但是增加了一个新的特性,大大地提高了插 ...
随机推荐
- outlook备份及恢复
outlook备份及恢复 Reference: http://wenku.baidu.com/link?url=2gtDkCSDoPdnfx3Ungd6on9wdhUTWgbO_vmmKLv1i4df ...
- Android之Adapter用法总结-(转)
Android之Adapter用法总结 1.概念 Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带.在常见的View(List View,Grid Vie ...
- Asp.Net MVC中DropDownListFor的用法
在Asp.Net MVC中可以用DropDownListFor的方式来让用户选择已定列表中的一个数值.用法不复杂,这里简单做一个记录. 首先我们要定义一个 Model ,用户在 DropDownLis ...
- N种内核注入DLL的思路及实现
内核注入,技术古老但很实用.现在部分RK趋向无进程,玩的是SYS+DLL,有的无文件,全部存在于内存中.可能有部分人会说:"都进内核了.什么不能干?".是啊,要是内核中可以做包括R ...
- matlab报错
这可能说明..压根就没有这个函数
- ERROR Shell: Failed to locate the winutils binary in the hadoop binary path
文章发自:http://www.cnblogs.com/hark0623/p/4170172.html 转发请注明 14/12/17 19:18:53 ERROR Shell: Failed to ...
- JMeter中的关联-正则表达式提取(2)
JMeter获取正则表达式中的提取的所有关联值的解决方法: 需求如下: { : ", : "results": : [ : : { : : : "total_e ...
- DNS常用命令
ipconfig/ifconfig 显示网络信息 nslookup host 查询域名对应的ip同时也显示了网关地址 cat /etc/resolv.conf 查看本地dns服务器地 ...
- 分享Kali Linux 2016.2第48周虚拟机
分享Kali Linux 2016.2第48周虚拟机该虚拟机使用Kali Linux 2016.2第48周的64位镜像安装而成.基本配置如下:(1)该系统默认设置单CPU双核,内存为2GB,硬盘为50 ...
- ReportNg 测试报告的定制修改【转】
前言 前段时间在Testerhome上面看到了测试报告生成系列之-------如何用 testNG 生成测试报告 简单的描述了一些测试报告的生成,接着有人在评论中回复说可以针对reportNg的测试报 ...