#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差一个数量级啊,伤自尊了)的更多相关文章

  1. 你与优秀源码之间只差一个 Star

    fir.im Weekly - 你与优秀源码之间只差一个 Star   说起开源社区,Github 是一个不可缺少的存在.作为全球最大的同性交友网站,上面有太多优秀的开源代码库和编程大神,让无数开发者 ...

  2. CSDN日报20170226——《你离心想事成仅仅差一个计划》

    [程序人生] 你离心想事成仅仅差一个计划 作者:安晓辉 从目标怎样导出工作计划.我们会以"出版一本小说"为例来解说计划的形成过程. 在開始之前.我们先来说明一个概念:目标的两种类型 ...

  3. MySQL查询优化之性能提升一个数量级

    这段时间一直在用kettle做数据抽取和报表,写SQL便是家常便饭了,200行+SQL经常要写.甚至写过最长的一个SQL500多行将近600行.这么长的SQL估计大部分人连看的意愿都没有,读起来也比较 ...

  4. 我们的java基础到底有多差 一个视频引发的感想

    以此文来警示自己. 大三要结束了. 我从大一下学期开始接触java,两年半了,期间有很努力的自学,也参与了一下项目,满以为自己的java基础应该不错,但今天在网上看了一个视频才发现自己学的是多么的&q ...

  5. 内存迟迟下不去,可能你就差一个GC.Collect

    一:背景 1. 讲故事 我们有一家top级的淘品牌店铺,为了后续的加速计算,在程序启动的时候灌入她家的核心数据到内存中,灌入完成后内存高达100G,虽然云上的机器内存有256G,然被这么划掉一半看着还 ...

  6. fir.im Weekly - 你与优秀源码之间只差一个 Star

    说起开源社区,Github 是一个不可缺少的存在.作为全球最大的同性交友网站,上面有太多优秀的开源代码库和编程大神,让无数开发者心生向往.那么如何正确的使用 Github,也许是编程学习之必要.来看下 ...

  7. 你跟大牛之间仅仅差一个google

    google在中国被墙的厉害,http://209.116.186.231/ 这个地址能够訪问google.另外.有VPN或者某个奇妙的浏览器也能够. 非技术人员,还能够凑合着用百度,可是技术人员必须 ...

  8. Codeforces Round #364 (Div. 1) (差一个后缀自动机)

    B. Connecting Universities 大意: 给定树, 给定2*k个点, 求将2*k个点两两匹配, 每个匹配的贡献为两点的距离, 求贡献最大值 单独考虑每条边$(u,v)$的贡献即可, ...

  9. 你与论文达人只差一个MathType的距离

    在理工类的论文文档中总是少不了数学公式的出现,各种符号夹杂在期间导致论文在编写时总是会出现各种各样的问题.但是这些问题在论文达人们手中全都不是事儿!分分钟搞定你数学公式上出现的问题!论文达人们是怎么搞 ...

随机推荐

  1. 原创:微信小程序页面跳转展示缓冲提示

    1.在JS文件中,直接加上下面代码即可: //缓冲提醒 wx.showToast({ title: '加载中', icon: 'loading', duration: 400 })

  2. jquery添加用户 事例

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  3. 解释一下文件/etc/fstab的内容

    /etc/fstab 内容解释(偷个懒,把别人的话拷贝过来,做个标记,然后下班走人...)/dev/hda1 /mnt/c ntfs ro,users,gid=users,umask=0002,nls ...

  4. IDEA的maven项目中静态文件编译的路径问题(未测试)

    转自:http://www.cnblogs.com/signheart/p/6625126.html IDEA的maven项目中,默认源代码目录下的xml等资源文件并不会在编译的时候一块打包进clas ...

  5. HDUOJ---汉洛塔IX

    汉诺塔IX Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  6. python网络编程详解

    最近在看<UNIX网络编程 卷1>和<FREEBSD操作系统设计与实现>这两本书,我重点关注了TCP协议相关的内容,结合自己后台开发的经验,写下这篇文章,一方面是为了帮助有需要 ...

  7. 房产地图google map的初步应用点滴.3)(转)

    房产地图google map的初步应用点滴.1)房产地图google map的初步应用点滴.2)房产地图google map的初步应用点滴.3) 房产地图google map的初步应用点滴.4) go ...

  8. JMeter学习笔记--详解JMeter定时器

    定时器的处理优先于同一作用域内的采样器,如果在同一作用域内有多个定时器,那么所有的定时器都会在每个采样器之前处理. 若定时器所在作用域内无采样器,那么定时器不会被处理 固定定时器,每个线程在请求之间间 ...

  9. OGG_GoldenGate数据迁移三进程Extract / Dump / Relicat(案例)

    2014-03-04 Created By BaoXinjian

  10. 代码解说Android Scroller、VelocityTracker

    在编写自己定义滑动控件时经常会用到Android触摸机制和Scroller及VelocityTracker.Android Touch系统简单介绍(二):实例具体解释onInterceptTouchE ...