#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. Web Service——CXF+Spring 整合

    结合spring框架来实现CXF发布SOAP协议的服务,步骤基本相同,所不同的是的多了一些配置项,步骤如下 1. 服务端 第一步:创建web项目(引入jar包) 第二步:创建SEI接口 import ...

  2. HttpClient中的Timout

    connection timeout和SoTimeout A connection timeout occurs only upon starting the TCP connection. This ...

  3. SVN标准开发布局目录,trunk,branches,tags用法详解

    http://www.cnblogs.com/newstar/archive/2011/01/04/svn.html 关于 SVN 目录结构       Subversion有一个很标准的目录结构,是 ...

  4. android 手机红外遥控器实现

    经过连续几天的编制,安卓手机代码终于完成了,目前已经将我宿舍,家里,集控室的红外遥控电气设备完好的遥控了,另外还遥控了我的D7000相机,不错终于完工了.代码分为二类:各种电视.相机.等等遥控编码最简 ...

  5. 在Android 开发中使用 SQLite 数据库笔记

    SQLite 介绍   SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能.此外它还是开源的,任何人都可以使用它.许多开源项目((Mozilla, PH ...

  6. pcurl 学习 http文件下载及写入空设备文件实例

    import pycurl import sys import os import random import string import time class Transaction(object) ...

  7. IP数据报格式和IP地址路由

    一.IP数据报格式 IP数据报格式如下: 注:需要注意的是网络数据包以大端字节序传输,当然头部也得是大端字节序,也就是说: The most significant bit is numbered 0 ...

  8. 以太网帧格式、IP数据报格式、TCP段格式+UDP段格式 详解

    转载:http://www.cnblogs.com/lifan3a/articles/6649970.html 以太网帧格式.IP数据报格式.TCP段格式+UDP段格式 详解   1.ISO开放系统有 ...

  9. chromedriver 下载地址

    重要的事情说三遍 chromedriver 下载地址 chromedriver 下载地址 chromedriver 下载地址 http://chromedriver.storage.googleapi ...

  10. Apache优化:修改最大并发连接数(转)

    Apache是一个跨平台的web服务器,由于其简单高效.稳定安全的特性,被广泛应用于计算机技术的各个领域.现在,Apache凭借其庞大的用户数,已成为用户数排名第一的web服务器. 尽 管如此,在实际 ...