| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 618 人关注过本帖
标题:还是之前那个问题,
只看楼主 加入收藏
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:10 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define INIT_ROWS 100
#define INCREMENT 50

typedef struct {
    unsigned num1;
    unsigned num2;
    char     name[9];
} DATA, * PDATA;

void insertion_sort(void * data,
                    unsigned num,
                    unsigned size,
                    int (* compare)(const void *, const void *))
{
    int i, j, k;
    void * temp = malloc(size);
    for(i = 1; i < num; i++) {
        for(j = 0; j < i; j++)
            if(compare(data + j * size, data + i * size) > 0)
                break;
        memcpy(temp, data + i * size, size);
        for(k = i; k > j; k--)
            memcpy(data + k * size, data + (k - 1) * size, size);
        memcpy(data + j * size, temp, size);
    }
    free(temp);
}

int compare1(const void * p1, const void * p2) {
    unsigned var1 = ((PDATA)(p1))->num1,
             var2 = ((PDATA)(p2))->num1;
    if(var1 == var2)
        return 0;
    if(var1 > var2)
        return 1;
    return -1;
}

int compare2(const void * p1, const void * p2) {
    unsigned var1 = ((PDATA)(p1))->num2,
             var2 = ((PDATA)(p2))->num2;
    if(var1 == var2)
        return 0;
    if(var1 > var2)
        return 1;
    return -1;
}

int main(void) {
    FILE *      fp_in = NULL;
    FILE *      fp_out = stdout;
    char        in_file_name[128];
    char        out_file_name[128];
    PDATA       pdatas = (PDATA)malloc(sizeof(DATA) * INIT_ROWS);
    unsigned    rows = 0;
    unsigned    size = INIT_ROWS;
    unsigned    i;
    printf("请输入需要排序的源文件名:");
    fflush(stdout);
    scanf("%s", in_file_name);
/*    printf("请输入排序后存放的文件名:");
    fflush(stdout);
    scanf("%s", out_file_name);*/
    if((fp_in = fopen(in_file_name, "r")) == NULL) {
        printf("%s 打开失败,程序将结束!\n");
        exit(1);
    }
/*    if((fp_out = fopen(out_file_name, "w")) == NULL) {
        printf("%s 打开失败,程序将结束!\n");
        exit(1);
    }*/
    while(fscanf(fp_in, "%u%u%s",
          &pdatas[rows].num1,
          &pdatas[rows].num2,
          pdatas[rows].name) != EOF)
    {
        if(++rows == size) {
            pdatas = realloc(pdatas, size += INCREMENT);
            if(pdatas == NULL)
                exit(1); // .......
        }
    }
    insertion_sort(pdatas, rows, sizeof(DATA), compare2);
    insertion_sort(pdatas, rows, sizeof(DATA), compare1);
    for(i = 0; i < rows; i++)
        fprintf(fp_out, "%u %u %s\n",
                pdatas[i].num1,
                pdatas[i].num2,
                pdatas[i].name);
    fclose(fp_in);
//    fclose(fp_out);
    return 0;
}

My life is brilliant
2011-07-21 20:30
快速回复:还是之前那个问题,
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.056337 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved