68.qq号索引结构体写入内存,并实现快速排序

  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 = '';
 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 }
原文地址:https://www.cnblogs.com/xiaochi/p/8445869.html