实现qsort(和qsort差一个数量级啊,伤自尊了)
#include <cstdio>
#include <cstdint>
#include <ctime>
#include <cstring>
#include <cstdlib> void GetPivot(uint8_t In_ui8A[], int64_t In_i64Begin, int64_t In_i64End)
{
uint8_t ui8Tmp = ;
uint64_t ui64PivotIdx = ;
if (In_ui8A == NULL || In_i64Begin >= In_i64End)
{
goto fun_ret;
} ui64PivotIdx = (In_i64End - In_i64Begin + ) / ;
ui8Tmp = In_ui8A[In_i64End];
In_ui8A[In_i64End] = In_ui8A[ui64PivotIdx + In_i64Begin];
In_ui8A[ui64PivotIdx + In_i64Begin] = ui8Tmp;
fun_ret:
return;
} void QSort(uint8_t In_ui8A[], int64_t In_i64Begin, int64_t In_i64End)
{
int64_t i = , j = ;
uint8_t ui8Pivot = , ui8Tmp = ;;
if (In_ui8A == NULL || In_i64Begin >= In_i64End)
{
goto fun_ret;
}
GetPivot(In_ui8A, In_i64Begin, In_i64End); i = In_i64Begin - ;
j = In_i64Begin;
ui8Pivot = In_ui8A[In_i64End]; do
{
if (In_ui8A[j] <= ui8Pivot)
{
ui8Tmp = In_ui8A[++ i];
In_ui8A[i] = In_ui8A[j];
In_ui8A[j] = ui8Tmp;
}
j ++;
} while (j < In_i64End); ui8Tmp = In_ui8A[i + ];
In_ui8A[i + ] = ui8Pivot;
In_ui8A[In_i64End] = ui8Tmp; QSort(In_ui8A, In_i64Begin, i);
QSort(In_ui8A, i + , In_i64End); fun_ret:
return;
} int compare (const void *p1, const void *p2)
{
if (*(uint8_t*)p1 < *(uint8_t*)p2) return -;
else if (*(uint8_t*)p1 == *(uint8_t*)p2) return ;
else return ;
} void main(int argc, char **argv)
{
uint8_t *pui8Buf1 = NULL, *pui8Buf2 = NULL;
FILE *pf = NULL;
long lFileSize = ;
clock_t ctBegin = , ctQSortTime = , ctMyTime = ; pf = fopen(argv[], "rb");
fseek(pf, , SEEK_END);
lFileSize = ftell(pf);
fseek(pf, , SEEK_SET);
pui8Buf1 = (uint8_t *)malloc(lFileSize);
pui8Buf2 = (uint8_t *)malloc(lFileSize);
memset(pui8Buf1, , lFileSize);
memset(pui8Buf2, , lFileSize);
fread(pui8Buf1, sizeof(pui8Buf1[]), lFileSize, pf);
memcpy(pui8Buf2, pui8Buf1, lFileSize);
fclose(pf);
pf = NULL; ctBegin = clock();
QSort(pui8Buf1, , lFileSize - );
ctMyTime = clock() - ctBegin; ctBegin = clock();
qsort((void *)pui8Buf2, lFileSize, sizeof(pui8Buf2[]), compare);
ctQSortTime = clock() - ctBegin; if (!memcmp((void *)pui8Buf1, (void *)pui8Buf2, lFileSize))
{
printf("MyQSort::%lu\nqsort::%lu\n", ctMyTime, ctQSortTime);
}
else
{
printf("FUCK!!!\n");
}
}
排序一个7,680字节的PE,自己实现的用了10+毫秒,qsort用了不到1毫秒,尼玛伤自尊了。
实现qsort(和qsort差一个数量级啊,伤自尊了)的更多相关文章
- 你与优秀源码之间只差一个 Star
fir.im Weekly - 你与优秀源码之间只差一个 Star 说起开源社区,Github 是一个不可缺少的存在.作为全球最大的同性交友网站,上面有太多优秀的开源代码库和编程大神,让无数开发者 ...
- CSDN日报20170226——《你离心想事成仅仅差一个计划》
[程序人生] 你离心想事成仅仅差一个计划 作者:安晓辉 从目标怎样导出工作计划.我们会以"出版一本小说"为例来解说计划的形成过程. 在開始之前.我们先来说明一个概念:目标的两种类型 ...
- MySQL查询优化之性能提升一个数量级
这段时间一直在用kettle做数据抽取和报表,写SQL便是家常便饭了,200行+SQL经常要写.甚至写过最长的一个SQL500多行将近600行.这么长的SQL估计大部分人连看的意愿都没有,读起来也比较 ...
- 我们的java基础到底有多差 一个视频引发的感想
以此文来警示自己. 大三要结束了. 我从大一下学期开始接触java,两年半了,期间有很努力的自学,也参与了一下项目,满以为自己的java基础应该不错,但今天在网上看了一个视频才发现自己学的是多么的&q ...
- 内存迟迟下不去,可能你就差一个GC.Collect
一:背景 1. 讲故事 我们有一家top级的淘品牌店铺,为了后续的加速计算,在程序启动的时候灌入她家的核心数据到内存中,灌入完成后内存高达100G,虽然云上的机器内存有256G,然被这么划掉一半看着还 ...
- fir.im Weekly - 你与优秀源码之间只差一个 Star
说起开源社区,Github 是一个不可缺少的存在.作为全球最大的同性交友网站,上面有太多优秀的开源代码库和编程大神,让无数开发者心生向往.那么如何正确的使用 Github,也许是编程学习之必要.来看下 ...
- 你跟大牛之间仅仅差一个google
google在中国被墙的厉害,http://209.116.186.231/ 这个地址能够訪问google.另外.有VPN或者某个奇妙的浏览器也能够. 非技术人员,还能够凑合着用百度,可是技术人员必须 ...
- Codeforces Round #364 (Div. 1) (差一个后缀自动机)
B. Connecting Universities 大意: 给定树, 给定2*k个点, 求将2*k个点两两匹配, 每个匹配的贡献为两点的距离, 求贡献最大值 单独考虑每条边$(u,v)$的贡献即可, ...
- 你与论文达人只差一个MathType的距离
在理工类的论文文档中总是少不了数学公式的出现,各种符号夹杂在期间导致论文在编写时总是会出现各种各样的问题.但是这些问题在论文达人们手中全都不是事儿!分分钟搞定你数学公式上出现的问题!论文达人们是怎么搞 ...
随机推荐
- 微信小程序:bindtap方法传参
1.wxml <view bindtap="pay_again" data-name="{{orderList.jid}}" data-fee=" ...
- redis lpop key 当key不存在时,返回nil , 监测redis执行语句是否正常执行
Lpop key 返回值: 列表的头元素. 当key 不存在时, 返回 nil . 需求: 开发在执行 lpop key 时, 出现问题 , 执行语句卡住, 不能执行下去 , 需对此做一个监测 由于 ...
- WPF基础学习第一天
格式 1.XAML格式: <Button x:Name="btnClick" Content="按钮" HorizontalAlignment=" ...
- HDUOJ-----取(m堆)石子游戏
取(m堆)石子游戏 Time Limit : 3000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Sub ...
- 使用springboot遇到的的异常
Unregistering JMX-exposed beans on shutdown <dependency> <groupId>org.springframework.bo ...
- MVC图片上传、浏览、删除 ASP.NET MVC之文件上传【一】(八) ASP.NET MVC 图片上传到服务器
MVC图片上传.浏览.删除 1.存储配置信息 在web.config中,添加配置信息节点 <appSettings> <add key="UploadPath" ...
- Python学习笔记020——数据库中的数据类型
1 数值类型 数值类型分为有符号signed和无符号unsigned两种. 1.1 整型 int (1)bigint 极大整型(8个字节) 范围 :-2**64 ~ 2**64 - 1 -922337 ...
- 《java设计模式》之责任链模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述责任链(Chain of Responsibility)模式的: 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其 ...
- DBA_实践指南系列3_Oracle Erp R12系统克隆Clone(案例)
2013-12-03 Created By BaoXinjian
- mysql - 语法复习与学习
//本月的第一天,最后一天 $start=date('Y-m-01', strtotime(date("Y-m-d"))); echo date('Y-m-d', strtotim ...