68.qq号索引结构体写入内存,并实现快速排序
2018-02-13 00:00
113 查看
1 //两个步骤,第一步读取文件,并且初始化索引结构体,把初始化的索引结构体写入到文件,第二步,读取这个文件到索引结构体 2 //并对这个结构体进行快速排序,得到顺序的索引,再写入文件 3 #define _CRT_SECURE_NO_WARNINGS 4 #include<stdio.h> 5 #include<stdlib.h> 6 7 char path[256] = "QQ.txt"; 8 char indexpath[256] = "QQindex8848.txt"; 9 char sortindexpath[256] = "QQsortindex8848.txt"; 10 11 #define allN 84331072 12 13 struct INDEX 14 { 15 //QQ号 16 long long QQ; 17 //索引 18 int index; 19 }; 20 //简化索引 21 typedef struct INDEX Index; 22 23 //从字符串获取qq号,存放在tmp中,并在tmp中提取QQ号 24 void getQQ(char *str, char *tmp) 25 { 26 strcpy(tmp, str); 27 char *p = tmp; 28 while (*p) 29 { 30 if (*p == '-') 31 { 32 *p = '\0'; 33 break; 34 } 35 p++; 36 } 37 } 38 39 //每一行读取到索引 40 void main1() 41 { 42 FILE *pfr = fopen(path, "r"); 43 FILE *pfw = fopen(indexpath, "wb"); 44 45 while (!feof(pfr)) 46 { 47 //获取当前文件指针距离开头的位置,在读取之前读取,读取的是每一行开头的位置 48 int index = ftell(pfr); 49 50 char str[50] = { 0 }; 51 //读取 52 fgets(str, 50, pfr); 53 char tmp[50] = { 0 }; 54 //获取QQ到tmp 55 getQQ(str, tmp); 56 //把QQ转换成long long类型 57 long long lltmp = atoll(tmp); 58 if (lltmp==0) 59 { 60 continue; 61 } 62 Index in1 = { 0 }; 63 in1.QQ = lltmp; 64 in1.index = index; 65 //把索引结构体写入 66 fwrite(&in1, sizeof(in1), 1, pfw); 67 } 68 69 fclose(pfr); 70 fclose(pfw); 71 printf("索引OK"); 72 system("pause"); 73 } 74 75 //比较两个结构体 76 int com(void *p1, void *p2) 77 { 78 Index *pl1 = p1; 79 Index *pl2 = p2; 80 if (pl1->QQ >pl2->QQ) 81 { 82 return 1; 83 } 84 else if (pl1->QQ <pl2->QQ) 85 { 86 return -1; 87 } 88 else 89 { 90 return 0; 91 } 92 93 } 94 95 //读取到结构体 96 void main() 97 { 98 FILE *pfr = fopen(indexpath, "rb"); 99 FILE *pfw = fopen(sortindexpath, "wb"); 100 //分配这么多个索引结构体(包括qq号和位置),并读取 101 Index *p = malloc(allN*sizeof(Index)); 102 fread(p, sizeof(Index), allN, pfr); 103 104 //对读取的结构体进行排序 105 qsort(p, sizeof(Index), allN,com ); 106 107 //写入 108 fwrite(p, sizeof(Index), allN, pfw); 109 110 //关闭文件 111 fclose(pfr); 112 fclose(pfw); 113 114 system("pause"); 115 }
相关文章推荐
- 58.大数据读入内存快速排序并写入内存,创建排序好的文件
- [Android开发] 在项目中快速实现 列表字母排序滑动索引 功能原理以及过程代码
- 快速集成android实现listview的字母A-Z排序,界面侧边字母索引
- 快速集成android实现listview的字母A-Z排序,界面侧边字母索引
- 快速排序——JAVA实现(图文并茂)
- 快速排序的非递归实现代码
- 用纯C语言实现快速排序,分递归调用法和非递归调用法。
- 快速排序-c++(分别用数组和容器实现)
- 鱼眼索引控件详解之二 —— 快速索引雏形实现
- C/C++实现快速排序和随机快速排序
- 快速排序(java实现)
- 快速排序java实现
- C#中的delegate以及利用List<T>中delegate快速实现排序、查找
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 快速排序的单链表递归实现
- 啊哈!算法 - 桶排序,冒泡排序,快速排序 - PHP实现
- 快速排序的两种实现
- 快速排序两种方式实现及优化总结
- 分治法:用C#实现快速排序
- 快速排序非递归实现