实现大文件里的快速排序

#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

struct csdn
{
    char name[22];
    char password[43];
    char email[52];

};
int namemax = -1;
int passmax = -1;
int mailmax = -1;

void init(struct csdn *pdata, char *str)
{
    for (char *p = str; *p != ‘\0‘;p++)
    {
        if (*p==‘#‘)
        {
            *p = ‘\0‘;
        }
    }
    strcpy(pdata->name, str);
    char *pstr1 = str + strlen(str) + 1;
    strcpy(pdata->password, pstr1);
    char *pstr2 = pstr1 + strlen(pstr1) + 1;
    strcpy(pdata->email, pstr2);
    //printf("%s,%s,%s", pdata->name, pdata->password, pdata->email);

}

void getmax(char *str)
{
    for (char *p = str; *p != ‘\0‘; p++)
    {
        if (*p == ‘#‘)
        {
            *p = ‘\0‘;
        }
    }
    int max1 = strlen(str);
    if (max1>namemax)
    {
        namemax = max1;
    }
    char *pstr1 = str + strlen(str) + 1;
    int max2 = strlen(pstr1);
    if (max2>passmax)
    {
        passmax = max2;
    }
    char *pstr2 = pstr1 + strlen(pstr1) + 1;
    int max3 = strlen(pstr2);
    if (max3>mailmax)
    {
        mailmax = max3;
    }

}

void readfiletxt()
{
    FILE *pfr = fopen("Z:\\I\\尹成清华终极版C语言视频源码文档20150131\\大数据相关数据\\csdn.txt", "r");
    FILE *pfw = fopen("Z:\\I\\尹成清华终极版C语言视频源码文档20150131\\大数据相关数据\\csdn.bin", "wb");
    if (pfr==NULL)
    {
        return;
    }
    else
    {
        while (!feof(pfr))
        {
            char str[256] = { 0 };
            fgets(str, 256, pfr);
            struct csdn csdn1;
            init(&csdn1, str);
            fwrite(&csdn1, sizeof(struct csdn), 1, pfw);//写入
            //getmax(str);
        }

    }

    fclose(pfr);
    fclose(pfw);
}

int getfilesize(char *path)
{
    FILE *pf = fopen(path, "rb");
    if (pf==NULL)
    {
        return -1;
    }
    else
    {
        fseek(pf, 0, SEEK_END);
        int length = ftell(pf);
        fclose(pf);
        return length;
    }

}
void main()
{
    //struct csdn csdn1;
    //char str[100] = "bamyl # 7618595 # [email protected]";
    //init(&csdn1, str);
    //readfiletxt();
    //printf("%d,%d,%d", namemax, passmax, mailmax);
    int size=getfilesize("Z:\\I\\尹成清华终极版C语言视频源码文档20150131\\大数据相关数据\\csdn.bin");
    printf("%d", size);
    printf("\n%d", size / sizeof(struct csdn));
    FILE *pf = fopen("Z:\\I\\尹成清华终极版C语言视频源码文档20150131\\大数据相关数据\\csdn.bin", "rb+");
    while (1)
    {
        printf("请输入你要读取的第N个元素");
        int N;
        scanf("%d", &N);

        struct csdn csdn1 = {0};
        fseek(pf, sizeof(struct csdn)*(N - 1), SEEK_SET);//移动到这个位置
        fread(&csdn1, sizeof(struct csdn), 1, pf);
        printf("\n%s,%s,%s", csdn1.name, csdn1.password, csdn1.email);

    }
    fclose(pf);

    system("pause");
}
时间: 2024-08-05 02:56:26

实现大文件里的快速排序的相关文章

统计大文件里单词

转载统计大文件里,频数最高的10个单词,(C# TPL DataFlow版) 最近公司搞了一个写程序的比赛,要求从2G的文件里统计出出现频率最高的10个单词. 最开始的想法是使用字典树,后来发现字典树更适合用在找前缀上,在查找没有hash表效率高. 之后使用Hash表+DataFlow完成了功能,2G的文件处理在20秒以内(其实我有信心优化到10秒以内,但是太折腾了). 这是我的设计图: 为什么要形成那么多结果?因为我不想写锁,写锁会降低很多效率,而且也失去了线程的意义,每个线程做自己的工作,

统计大文件里,频数最高的10个单词,(C# TPL DataFlow版)

最近公司搞了一个写程序的比赛,要求从2G的文件里统计出出现频率最高的10个单词. 最开始的想法是使用字典树,后来发现字典树更适合用在找前缀上,在查找没有hash表效率高. 之后使用Hash表+DataFlow完成了功能,2G的文件处理在20秒以内(其实我有信心优化到10秒以内,但是太折腾了). 这是我的设计图: 为什么要形成那么多结果?因为我不想写锁,写锁会降低很多效率,而且也失去了线程的意义,每个线程做自己的工作, 最后在把每个线程处理的结果汇总起来,这样也符合fork join 的设计. 而

读写文件:每次读入大文件里的一行、读写.CSV文件

读文件: 传统的读法.所有读出,按行处理: fp=open("./ps.txt", "r"); alllines=fp.readlines(); fp.close(); for eachline in alllines: print eachline 推荐读取方法,使用文件迭代器 , 每次仅仅读取和显示一行.读取大文件时应该这样: fp=open("./ps.txt", "r"); for eachline in fp: pr

Facebook图片存储系统Haystack——存小文件,本质上是将多个小文件合并为一个大文件来降低io次数,meta data里存偏移量

转自:http://yanyiwu.com/work/2015/01/04/Haystack.html 一篇14页的论文Facebook-Haystack, 看完之后我的印象里就四句话: 因为[传统文件系统的弊端] 因为[缓存无法解决长尾问题] 所以[多个图片信息(Needle)存在同一个文件(SuperBlock)中] 所以[显著提高性能] 传统文件系统的弊端 传统的 POSIX 文件系统不适合高性能的图片存储, 主要原因是基于该文件系统来存储的话,是讲每个图片存储成某目录下的一个文件, 每次

WebUploader插件上传大文件单文件和多文件JAVA版使用总结

一.使用webuploader插件的原因说明 被现在做的项目坑了. 先说一下我的项目架构Spring+struts2+mybatis+mysql 然后呢.之前说好的按照2G上传就可以了,于是乎,用了ajaxFileUpload插件,因为之前用图片上传也是用这个,所以上传附件的时候就直接拿来用了 各种码代码,测试也测过了,2G文件上传没问题,坑来了,项目上线后,客户又要求上传4G文件,甚至还有20G以上的..纳尼,你不早说哦... 在IE11下用ajaxFileUpload.js插件上传超过4G的

php使用file函数、fseek函数读取大文件效率分析

php读取大文件可以使用file函数和fseek函数,但是二者之间效率可能存在差异,本文章向大家介绍php file函数与fseek函数实现大文件读取效率对比分析,需要的朋友可以参考一下. 1. 直接采用file函数来操作 由于 file函数是一次性将所有内容读入内存,而PHP为了防止一些写的比较糟糕的程序占用太多的内存而导致系统内存不足,使服务器出现宕机,所以默认情况下限制只能最大使用内存16M,这是通过php.ini里的 memory_limit = 16M 来进行设置,这个值如果设置-1,

基于Nodejs的大文件上传之断点续传

接着<扒一扒Nodejs formidable的onPart>和<也说文件上传之兼容IE789的进度条---丢掉flash>:前面已完成兼容IE789的大文件上传:无flash的低版本进度条,高版本的分段上传,并已为断点续传做好铺垫: 说什么做好铺垫,原本以为Nodejs端已没问题,只剩前端依靠HTML5接着监听abort事件,保存中断时上传到第几块了(断点续传只支持文件比较大,然后意外上传中断了,暂时定50M开启断点续传吧),通过文件内容hash和该文件唯一上传token来记录断

iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载+使用输出流代替文件句柄

前言:本篇讲解,在前篇iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载的基础上,使用输出流代替文件句柄实现大文件断点续传.    在实际开发中,输入输出流用的比较少,但是用起来也是很方便的.iOS开发用到的输入输出流和在Java中的输入输出流是几乎一样的,本质也是一个意思:将网络返回的数据当做流来处理.    输入输出的理解:输入到哪里?输出到哪里?这个问题不难理解,输入输出是要站着服务器角度来思考的,下面用图来解释:    代码关键词: 1.在接收到响应头的代理

linux查找文件夹下的全部文件里是否含有某个字符串

查找文件夹下的全部文件里是否含有某个字符串 find .|xargs grep -ri "IBM" 查找文件夹下的全部文件里是否含有某个字符串,而且仅仅打印出文件名称 find .|xargs grep -ri "IBM" -l 1.正則表達式 (1)正則表達式一般用来描写叙述文本模式的特殊使用方法,由普通字符(比如字符a-z)以及特殊字符(称为元字符.如/.*.?等)组成. (2)基本元字符集及其含义 ^ :仅仅匹配行首. 如^a 匹配以a开头的行abc,a2e,