zoukankan      html  css  js  c++  java
  • 文件排序及二分查找法与冒泡排序法

    char *fputs(char *s, int n, FILE *fp)
    int fputs(char *s, FILE *fp)
    fgets正常时返回读取字符串的首地址,出错或文件尾,返回NULL。
    fputs正常时返回写入的最后一个字符,出错返回EOF。

    #define  _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    //文件排序
    
    //内存排序
    
    void main1()
    {
        time_t ts;
        unsigned int num = time(&ts);//获取随机数种子
        srand(num);
    
        int a[100];
        for (int i = 0; i < 100;i++)
        {
            a[i] = rand() % 100;
        }
        FILE *pf = fopen("C:\1.data", "wb");
        fwrite(a, sizeof(int), 100, pf);
        fclose(pf);
    
        system("pause");
    
    
    
    
    
    }
    int com(void *p1, void *p2)
    {
        int *pint1 = p1;
        int *pint2 = p2;
        if (*pint1 >*pint2)
        {
            return 1; //大于
        } 
        else if (*pint1 <*pint2)
        {
            return -1;//小于
        } 
        else
        {
            return 0;
        }
        //>  1,0
    
    }
    //读取到内存,然后排序
    void memsort()
    {
        int *p = malloc(400);
        int *pread = malloc(400);
        FILE *pf = fopen("C:\1.data", "rb+");
        fread(p, sizeof(int), 100, pf);
        for (int i = 0; i < 100; i++)
        {
            printf("
    %d", p[i]);
        }
        fflush(pf);//刷新,生效
    
        qsort(p, 100, 4, com);//排序
        printf("sort later
    ");
        for (int i = 0; i < 100; i++)
        {
            printf("
    %d", p[i]);
        }
        rewind(pf);
        fwrite(p, sizeof(int), 100, pf);
        fflush(pf);//刷新,生效
        rewind(pf);
        fread(pread, sizeof(int), 100, pf);
        fflush(pf);//刷新,生效
        for (int i = 0; i < 100;i++)
        {
            printf("
    pread=%d", pread[i]);
        }
    
    
        fclose(pf);
    
    
    
    }
    
    void fileread()
    {
        FILE *pf = fopen("C:\1.data", "rb");
        for (int i = 0; i < 100;i++)
        {
            int num;
            fseek(pf,i*sizeof(int) , SEEK_SET);//i顺序,99-i逆序
            fread(&num, sizeof(int), 1, pf);
            if (num==3)
            {
                printf("%d", num);//顺序查找 100
            } 
            
            printf("
    num=%d", num);
        }
        fclose(pf);
    
    }
    
    void binsearch(int findnum)
    {
        FILE *pf = fopen("C:\1.data", "rb");
        int tou = 0;
        int wei = 99;
        int flag = 0;
        int ci = 0;
        while (tou<=wei)
        {
            ci++;
            int  zhong = (tou + wei) / 2;
            //a[zhong]
            int  zhongdata;
            fseek(pf,zhong*sizeof(int), SEEK_SET);//i顺序,99-i逆序
            fread(&zhongdata, sizeof(int), 1, pf);
            if (findnum==zhongdata)
            {
                flag = 1;//找到
                printf("
    找到%d", zhongdata);
                break;
            } 
            else if (findnum > zhongdata)
            {
                tou = zhong + 1;
            } 
            else
            {
                wei = zhong - 1;
            }
    
    
        }
        if (flag)
        {
            printf("找到了
    ");
        } 
        else
        {
            printf("没找到了
    ");
        }
        printf("找了%d次",ci);
    
    
    
    
        fclose(pf);
    
    }
    void main3x()
    {
        //memsort();
        //fileread();
        fileread();
        while (1)
        {
            int findnum;
            scanf("%d", &findnum);
            binsearch(findnum);
        }
        system("pause");
    
    
    }
    
    
    void randwirte()
    {
        time_t ts;
        unsigned int num = time(&ts);//获取随机数种子
        srand(num);
    
        int a[100];
        for (int i = 0; i < 100; i++)
        {
            a[i] = rand() % 100;
        }
        FILE *pf = fopen("C:\sort.data", "wb");
        fwrite(a, sizeof(int), 100, pf);
        fclose(pf);
    
    }
    void showfile()
    {
        int *p = malloc(400);
        FILE *pf = fopen("C:\sort.data", "rb");
        fread(p, sizeof(int), 100, pf);
        for (int i = 0; i < 100; i++)
        {
            printf("
    %d", p[i]);
        }
        fclose(pf);
    
    }
    
    void main()
    {
        //showfile();
        showfile();
        printf("
    排序以后");
        FILE *pf = fopen("C:\sort.data", "rb+");
        for (int i = 0; i < 100 - 1;i++)
        {
            for (int j = 0; j < 100 - 1 - i;j++)
            {
                int dataj = 0;
                fseek(pf, sizeof(int)*j, SEEK_SET);
                fread(&dataj, sizeof(int), 1, pf);
    
                int dataj1 = 0;
                fseek(pf, sizeof(int)*(j+1), SEEK_SET);
                fread(&dataj1, sizeof(int), 1, pf);
                if (dataj <dataj1)
                {
                    fseek(pf, sizeof(int)*(j + 1), SEEK_SET);
                    fwrite(&dataj, 4, 1, pf);
    
                    fseek(pf, sizeof(int)*j, SEEK_SET);
                    fwrite(&dataj1, 4, 1, pf);
                }
    
                /*if (a[j]<a[j+1])
                {
                    swap(a[j] a[j+1])
                }*/
            }
        }
        fclose(pf);
        showfile();
        system("pause");
    }
  • 相关阅读:
    自动添加控件,一次提交多条记录。
    Asp.Net 2.0 的 Master Page(母版页)
    vs2008中文版提供下载(包含中文msdn),包括vs2008序列号和破解方法。
    C# 2.0 :仿MSN提示框or仿迅雷提示框(.Net2.0).rar
    httpanalyzer 结合 HttpWebRequest Post的运用
    xp访问权限问题的解决(绝对有效)
    Request.params、Request、Request.querystring、Request.Form 具体区别!
    C# List<> 泛型中遍历不同类型
    备份与恢复数据库的存储过程
    .Net 生成不重复的随机数
  • 原文地址:https://www.cnblogs.com/sjxbg/p/5878665.html
Copyright © 2011-2022 走看看