C语言实现文件排序

C语言实现文件排序,第1张

只需要将stdinf结构体中的sc改为float类型,并修改对应的fscanf()/fprintf()中的格式符即可,如下:

//---------------------------------------------------------------------------

#include

<stdio.h>

#include

<stdlib.h>

typedef

struct

{

char

name[80]

float

sc

}

stdinf

int

cmp(const

void

*a,const

void

*b)

{

return

((const

stdinf*)b)->sc-((const

stdinf

*)a)->sc

}

int

main(void)

{

FILE

*fp

stdinf

*sts=NULL

int

i,n

fp=fopen("1.txt","r")

/*打开文件*/码困茄

for

(n

=

0

!feof(fp)

n++)

{

/*读取迟察信息到sts数组尺雀*/

if

(i)

sts=(stdinf*)realloc(sts,sizeof(stdinf)*(n+1))

else

sts=(stdinf*)malloc(sizeof(stdinf))

fscanf(fp,"%s

%f",sts[n].name,&sts[n].sc)

}

fclose(fp)

qsort(sts,i,sizeof(stdinf),cmp)

/*排序*/

fp=fopen("1.txt","w")

/*重新打开文件*/

for

(i

=

0

i<n

i++)

{

/*写入有序信息*/

fprintf(fp,"%s

%f\n",sts[i].name,sts[i].sc)

}

fclose(fp)

return

0

}

//---------------------------------------------------------------------------

#include <stdio.h>

#include <stdlib.h>

//假设要打开的文件内容全是整数(如果是橡枣浮点数参照修改)

//数据与数据之间用空格分开

//每行滑判多少数据可以不相同

//数组从小到大排序

void sortit(int *a,int n) {

int i,j,m

for(i=0i<n-1i++)

for(j=i+1j<nj++)

if(a[i]>a[j]){

m=a[i]a[i]=a[j]a[j]=m

}

}

//输出数组元素

void printit(int *a,int n){

int i

for(i=0i<信如改ni++){

printf("%5d",a[i])

if (i%10==9) printf("\n") //设置每10个换行

}

}

//从文件fp中读取n个数据到a

void getdata(FILE *fp,int *a,int n){

int i

fseek(fp,0,0)

for(i=0i<ni++)

fscanf(fp,"%d",&a[i])

}

//获取文件中整数数椐的个数

int getdatabound(FILE *fp){

int i=0,n

fseek(fp,0,0)

while(fscanf(fp,"%d",&n)!=EOF) i++

return i

}

int main(){

int n,*a

char *myfile="d:\\data.txt"

FILE *fp

if ((fp=fopen(myfile,"r"))==NULL){

printf("打开文件%s失败\n",myfile)

return 0

}

n=getdatabound(fp) //获取该文件中有多少整数

printf("该文件共有%d个整数\n",n)

a=(int *)malloc(sizeof(int)*n) //分配n个整数的空间

getdata(fp,a,n) //从文件fp中读取n个数据到a

fclose(fp)

printf("排序前的数组\n")

printit(a,n)//输出数组的值

printf("\n")

sortit(a,n)

printf("排序后的数组\n")

printit(a,n)

printf("\n")

}

采用插入排序,通过排空猜索引加速。C代码:

#include <stdio.h>

#define NATION_MAX 256

#define LINE_MAX 1000

#define HEADER_SIZE 256

typedef struct

{

int No

char Nation[NATION_MAX]

int gold, silver, bronze, sum

}Medal

int loadMedal(Medal *medals, char *header, const char *fileName)

{

int n = 0

FILE *fp = fopen(fileName, "r")

if(!fp) return 0

fgets(header, HEADER_SIZE, fp)

while(fscanf(fp, "正亏备%d%s%d%d%d%d", &(medals[n].No), medals[n].Nation,

&(medals[n].gold), &(medals[n].silver), &(medals[n].bronze),

&(medals[n].sum)) == 6){

n ++

if(n >= LINE_MAX) return n

}

fclose(fp)

return n

}

void showMedal(Medal *medals, char *header, int nMedal, int *sorted)

{

int i, index

fputs(header, stdout)

for(i = 0i <nMedali ++) {

index = sorted[i]

printf("举毁%d\t%s\t%d\t%d\t%d\t%d\n", medals[index].No,

medals[index].Nation, medals[index].gold,

medals[index].silver, medals[index].bronze, medals[index].sum)

}

}

void sortByNation(Medal *medals, int nMedal, int *sorted)

{

int i, j

int key

int *a = sorted

int index

for(j = 1j <nMedalj ++){

key = medals[a[j]].Nation[0]

index = a[j]

for(i = j - 1(medals[a[i]].Nation[0] >key) &&(i >= 0)i--){

a[i+1] = a[i]

}

a[i+1] = index

}

}

void sortBySum(Medal *medals, int nMedal, int *sorted)

{

int i, j

int key

int *a = sorted

int index

for(j = 1j <nMedalj ++){

key = medals[a[j]].sum

index = a[j]

for(i = j - 1(medals[a[i]].sum >key) &&(i >= 0)i--){

a[i+1] = a[i]

}

a[i+1] = index

}

}

void resetIndex(int *sorted, int nMedal)

{

int i

if(nMedal >LINE_MAX) return

for(i = 0i <nMedali++){

sorted[i] = i

}

}

int main()

{

Medal medals[LINE_MAX]

int sorted[LINE_MAX]

char header[HEADER_SIZE]

int nMedal

nMedal = loadMedal(medals, header, "medal.txt")

resetIndex(sorted, nMedal)

/* showMedal(medals, header, nMedal, sorted)*/

/* 按国家首字母排序*/

sortByNation(medals, nMedal, sorted)

/* 显示 */

showMedal(medals, header, nMedal, sorted)

/* 按总奖牌数排序 */

sortBySum(medals, nMedal, sorted)

/* 显示 */

showMedal(medals, header, nMedal, sorted)

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8198098.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存