#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. VS:"64位调试操作花费的时间比预期要长"的一解决途径

    解决办法之一: 在命令提示符那里打入如下命令: netsh winsock reset catalognetsh int ip reset reset.log hit 重启电脑后,即可

  2. 工具-VIM配置

    设置缩进的空格数 shiftwidth=4 设置制表符宽度 tabstop=4 高亮显示当前行 cursorline 高亮显示当前列 cursorcolumn

  3. JS操作frame框架

    1 框架编程概述 一个Html 页面可以有一个或多个子框架,这些子框架以<iframe>来标记,用来显示一 个独立的Html 页面.这里所讲的框架编程包括框架的自我控制以及框架之间的互相访 ...

  4. C#抽象方法

    在覆盖父类的方法时,必须显式说明是在覆盖父类方法,否则相当于没有覆盖. class Animal { public void run() { Console.WriteLine("anima ...

  5. Python中 append 和 extend 的区别

    Python中Lists 的两个方法: append 和 extend : list.append(object) 向列表中添加一个对象object.append 接受一个参数,这个参数可以是任何数据 ...

  6. linux 常用awk命令

    linux awk命令详解awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每 ...

  7. HOJ 1402 整数划分

    HOJ1402 整数划分 http://acm.hit.edu.cn/hoj/problem/view?id=1402 [题目描述] 整数划分是一个经典的问题.希望这道题会对你的组合数学的解题能力有所 ...

  8. python学习笔记013——推导式

    1 推导式简介 推导式comprehensions(又称解析式),是Python的一种独有特性. 推导式是可以从一个数据序列构建另一个新的数据序列的结构体. 推导式有三种形式: 1)列表推导式 (li ...

  9. 摘:VC开发数据库基础之ADO篇

    一.ADO简介ADO(ActiveX Data Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE DB之上的高层数据库访问技术,请不必为此担心,即使你对OLE DB,COM ...

  10. DB2中三个有关锁变量DB2_EVALUNCOMMITTED,DB2_SKIPDELETED和DB2_SKIPINSERTED的使用

    本文主要解释下DB2中三个有关锁变量DB2_EVALUNCOMMITTED,DB2_SKIPDELETED和DB2_SKIPINSERTED的使用 实验环境: DB2 v9.7.0.6 AIX 6.1 ...