C语言 - 冒泡排序法

C语言 - 冒泡排序法

/*本程序用于比较两种不同的冒泡排序法对同一个样本排序时的运算次数。程序随机生成了20组*/
/*样本,对于每一组样本,程序将会输出排序前的样本、排序后的样本、当前样本的运算次数统计*/
/*数据。程序会实时地把输出记录在本地文件D:\BubbleSort.txt中。同时,程序还为20组样本的*/
/*运算次数统计数据单独生成了一个记录文件副本D:\BubbleSortStatistic.txt            */
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>

int sornum1_inta[10000];//sort number,存储使用第一种冒泡排序法的样本(样本1)
int sornum2_inta[10000];
    //sort number,sornum1的副本,使用第二种冒泡排序法排序(样本2)
int smpnum_int = 20;//sample number,样本数
long long int asmnum1_ll , asmnum2_ll;//assignment number,赋值的次数
long long int comnum1_ll , comnum2_ll;//compare number,比较的次数
long long int allnum1_ll , allnum2_ll;//all number,总运算次数
FILE *res_fp;//result FILE pointer,记录输出结果的文件
FILE *stc_fp;//statistic FILE pointer,记录统计数据的文件

void prt1(void);
void sor1(void);
void prtsor1(void);
void prt2(void);
void sor2(void);
void prtsor2(void);
void prtstc(void);
void prtstc_f(void);
void prtstc_sf(void);

int main(int argc, char const *argv[])
{
    SetConsoleCP(65001);
    SetConsoleOutputCP(65001);
    srand((unsigned int)(time(NULL)));
    res_fp = fopen("D:\\BubbleSort.txt","w+");
    stc_fp = fopen("D:\\BubbleSortStatistic.txt","w+");
    while(smpnum_int--)
    {
        for (int maknum_i = 0; maknum_i < 10000; ++maknum_i)
            //make number,用于生成随机数组的循环
        
        {
            sornum1_inta[maknum_i] = sornum2_inta[maknum_i] = rand();
        }
        printf(".\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n");
        fprintf(res_fp , 
                ".\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n");
        prt1();
        printf(".\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n");
        fprintf(res_fp , 
                ".\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n");
        sor1();
        prtsor1();
        printf(".\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n");
        fprintf(res_fp , 
                ".\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n");
        prt2();
        printf(".\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n");
        fprintf(res_fp , 
                ".\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n");
        sor2();
        printf(".\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n");
        fprintf(res_fp , 
                ".\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n");
        prtsor2();
        printf(".\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n");
        fprintf(res_fp , 
                ".\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n");
        prtstc();
        prtstc_f();
        prtstc_sf();
        srand((unsigned int)(time(NULL) + smpnum_int));
    }
    fclose(res_fp);
    fclose(stc_fp);
    system("pause"); 
    return 0;
}


void prt1(void)
    //print,此函数用于打印样本1
{
    for (int i = 0; i < 10000; ++i)
    {
        printf("%5d  ", sornum1_inta[i]);
        fprintf(res_fp , "%5d  ", sornum1_inta[i]);
        if ((i + 1) % 10 == 0)
        {
            printf("\n\n");
            fprintf(res_fp , "\n\n");
        }
    }
    printf("\n\n");
    fprintf(res_fp , "\n\n");
}


void sor1(void)
    //sort,此函数使用第一种冒泡排序法对样本1排序
{
    int curidx_int = 1;//current index,当前气泡的下标
    asmnum1_ll = comnum1_ll = 0;
    while(comnum1_ll++ , curidx_int <= 10000)
    {
        while((comnum1_ll++ , curidx_int != 0) && (comnum1_ll++ , 
                sornum1_inta[curidx_int] < sornum1_inta[curidx_int - 1]))
        {
            int temp;
            temp = sornum1_inta[curidx_int];
            asmnum1_ll++;
            sornum1_inta[curidx_int] = sornum1_inta[curidx_int - 1];
            asmnum1_ll++;
            sornum1_inta[curidx_int - 1] = temp;
            asmnum1_ll++;
            curidx_int--;
            asmnum1_ll++;
        }
        curidx_int++;
        asmnum1_ll++;
    }
}


void prtsor1(void)
    //print sorted number,此函数用于打印排好序的样本1
{
    for (int i = 0; i < 10000; ++i)
    {
        printf("%5d  ", sornum1_inta[i]);
        fprintf(res_fp , "%5d  ", sornum1_inta[i]);
        if ((i + 1) % 10 == 0)
        {
            printf("\n\n");
            fprintf(res_fp , "\n\n");
        }
    }
    printf("\n\n");
    fprintf(res_fp , "\n\n");
}


void prt2(void)
    //print,此函数用于打印样本2
{
    for (int i = 0; i < 10000; ++i)
    {
        printf("%5d  ", sornum2_inta[i]);
        fprintf(res_fp , "%5d  ", sornum2_inta[i]);
        if ((i + 1) % 10 == 0)
        {
            printf("\n\n");
            fprintf(res_fp , "\n\n");
        }
    }
    printf("\n\n");
    fprintf(res_fp , "\n\n");
}


void sor2(void)
    //sort,此函数使用第二种冒泡排序法对样本2排序
{
    int ifchange = 1;
    asmnum2_ll = comnum2_ll = 0;
    while(comnum2_ll++ , ifchange == 1)
    {
        ifchange = 0;
        asmnum2_ll++;
        for (int curidx_i = 10000 - 2; (comnum2_ll++ , curidx_i >= 0); 
                asmnum2_ll++ , --curidx_i)
        {
            if (comnum2_ll++ , 
                    sornum2_inta[curidx_i] < sornum2_inta[curidx_i - 1])
            {
                int temp;
                temp = sornum2_inta[curidx_i];
                asmnum2_ll++;
                sornum2_inta[curidx_i] = sornum2_inta[curidx_i - 1];
                asmnum2_ll++;
                sornum2_inta[curidx_i - 1] = temp;
                asmnum2_ll++;
                ifchange = 1;
                asmnum2_ll++;
            }
        }
    }
}


void prtsor2(void)
    //print sorted number,此函数用于打印排好序的样本2
{
    for (int i = 0; i < 10000; ++i)
    {
        printf("%5d  ", sornum2_inta[i]);
        fprintf(res_fp , "%5d  ", sornum2_inta[i]);
        if ((i + 1) % 10 == 0)
        {
            printf("\n\n");
            fprintf(res_fp , "\n\n");
        }
    }
    printf("\n\n");
    fprintf(res_fp , "\n\n");
}


void prtstc(void)
    //print statistic,用于打印统计得到的两种排序法各自的运算次数
{
    allnum1_ll = asmnum1_ll + comnum1_ll;
    allnum2_ll = asmnum2_ll + comnum2_ll;
    printf("第一种冒泡排序法(单对象)比较了 %lld 次,赋值了 %lld 次\n\n", 
            comnum1_ll , asmnum1_ll);
    printf("第二种冒泡排序法(多对象)比较了 %lld 次,赋值了 %lld 次\n\n", 
            comnum2_ll , asmnum2_ll);
    (asmnum1_ll > asmnum2_ll)?
        (printf("第一种冒泡排序法(单对象)赋值运算次数较多\n\n")):
        (
            (asmnum1_ll == asmnum2_ll)?
                (printf("两种方法赋值运算次数一样多\n\n")):
                (printf("第二种冒泡排序法(多对象)赋值运算次数较多\n\n"))
        );
    (comnum1_ll > comnum2_ll)?
        (printf("第一种冒泡排序法(单对象)比较运算次数较多\n\n")):
        (
            (comnum1_ll == comnum2_ll)?
                (printf("两种方法比较运算次数一样多\n\n")):
                (printf("第二种冒泡排序法(多对象)比较运算次数较多\n\n"))
        );
    (allnum1_ll > allnum2_ll)?
        (printf("第一种冒泡排序法(单对象)总运算次数较多\n\n")):
        (
            (allnum1_ll == allnum2_ll)?
                (printf("两种方法总运算次数一样多\n\n")):
                (printf("第二种冒泡排序法(多对象)总运算次数较多\n\n"))
        );
}


void prtstc_f(void)
    //print statistic to file,用于打印统计得到的两种排序法各自的运算次数到文件中
{
    allnum1_ll = asmnum1_ll + comnum1_ll;
    allnum2_ll = asmnum2_ll + comnum2_ll;
    fprintf(res_fp , "第一种冒泡排序法(单对象)比较了 %lld 次,赋值了 %lld 次\n\n", 
            comnum1_ll , asmnum1_ll);
    fprintf(res_fp , "第二种冒泡排序法(多对象)比较了 %lld 次,赋值了 %lld 次\n\n", 
            comnum2_ll , asmnum2_ll);
    (asmnum1_ll > asmnum2_ll)?
        (fprintf(res_fp , "第一种冒泡排序法(单对象)赋值运算次数较多\n\n")):
        (
            (asmnum1_ll == asmnum2_ll)?
                (fprintf(res_fp , "两种方法赋值运算次数一样多\n\n")):
                (fprintf(res_fp , "第二种冒泡排序法(多对象)赋值运算次数较多\n\n"))
        );
    (comnum1_ll > comnum2_ll)?
        (fprintf(res_fp , "第一种冒泡排序法(单对象)比较运算次数较多\n\n")):
        (
            (comnum1_ll == comnum2_ll)?
                (fprintf(res_fp , "两种方法比较运算次数一样多\n\n")):
                (fprintf(res_fp , "第二种冒泡排序法(多对象)比较运算次数较多\n\n"))
        );
    (allnum1_ll > allnum2_ll)?
        (fprintf(res_fp , "第一种冒泡排序法(单对象)总运算次数较多\n\n")):
        (
            (allnum1_ll == allnum2_ll)?
                (fprintf(res_fp , "两种方法总运算次数一样多\n\n")):
                (fprintf(res_fp , "第二种冒泡排序法(多对象)总运算次数较多\n\n"))
        );
}


void prtstc_sf(void)
    /*print statistic to statistic file,
      用于打印统计得到的两种排序法各自的运算次数到统计数据文件中*/
{
    allnum1_ll = asmnum1_ll + comnum1_ll;
    allnum2_ll = asmnum2_ll + comnum2_ll;
    fprintf(stc_fp , "第一种冒泡排序法(单对象)比较了 %lld 次,赋值了 %lld 次\n\n", 
            comnum1_ll , asmnum1_ll);
    fprintf(stc_fp , "第二种冒泡排序法(多对象)比较了 %lld 次,赋值了 %lld 次\n\n", 
            comnum2_ll , asmnum2_ll);
    (asmnum1_ll > asmnum2_ll)?
        (fprintf(stc_fp , "第一种冒泡排序法(单对象)赋值运算次数较多\n\n")):
        (
            (asmnum1_ll == asmnum2_ll)?
                (fprintf(stc_fp , "两种方法赋值运算次数一样多\n\n")):
                (fprintf(stc_fp , "第二种冒泡排序法(多对象)赋值运算次数较多\n\n"))
        );
    (comnum1_ll > comnum2_ll)?
        (fprintf(stc_fp , "第一种冒泡排序法(单对象)比较运算次数较多\n\n")):
        (
            (comnum1_ll == comnum2_ll)?
                (fprintf(stc_fp , "两种方法比较运算次数一样多\n\n")):
                (fprintf(stc_fp , "第二种冒泡排序法(多对象)比较运算次数较多\n\n"))
        );
    (allnum1_ll > allnum2_ll)?
        (fprintf(stc_fp , "第一种冒泡排序法(单对象)总运算次数较多\n\n")):
        (
            (allnum1_ll == allnum2_ll)?
                (fprintf(stc_fp , "两种方法总运算次数一样多\n\n")):
                (fprintf(stc_fp , "第二种冒泡排序法(多对象)总运算次数较多\n\n"))
        );
    fprintf(stc_fp, "\n************************************************"
            "***********************************************************\n\n");
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
系统根据B/S,即所谓的电脑浏览器/网络服务器方式,运用Java技术性,挑选MySQL作为后台系统。系统主要包含对客服聊天管理、字典表管理、公告信息管理、金融工具管理、金融工具收藏管理、金融工具银行卡管理、借款管理、理财产品管理、理财产品收藏管理、理财产品银行卡管理、理财银行卡信息管理、银行卡管理、存款管理、银行卡记录管理、取款管理、转账管理、用户管理、员工管理等功能模块。 文中重点介绍了银行管理的专业技术发展背景和发展状况,随后遵照软件传统式研发流程,最先挑选适用思维和语言软件开发平台,依据需求分析报告模块和设计数据库结构,再根据系统功能模块的设计制作系统功能模块图、流程表和E-R图。随后设计架构以及编写代码,并实现系统能模块。最终基本完成系统检测和功能测试。结果显示,该系统能够实现所需要的作用,工作状态没有明显缺陷。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。进入银行卡列表,管理员可以进行查看列表、模糊搜索以及相关维护等操作。用户进入系统可以查看公告和模糊搜索公告信息、也可以进行公告维护操作。理财产品管理页面,管理员可以进行查看列表、模糊搜索以及相关维护等操作。产品类型管理页面,此页面提供给管理员的功能有:新增产品类型,修改产品类型,删除产品类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值