应试记录3

#include <stdio.h>
int h[ 101];//用来存放堆的数组
int n;//用来存储堆中元素的个数,也就是堆的大小

//交换函数,用来交换堆中的两个元素的值
void swap(int x,int y)
{
    int t;
    t=h[ x];
    h[ x]=h[ y];
    h[ y]=t;
}

//向下调整函数
void siftdown(int i) //传入一个需要向下调整的结点编号i,这里传入1,即从堆的顶点开始向下调整
{
    int t,flag=0;//flag用来标记是否需要继续向下调整
    //当i结点有儿子的时候(其实是至少有左儿子的情况下)并且有需要继续调整的时候循环窒执行
    while( i*2<=n && flag==0 )
    {
        //首先判断他和他左儿子的关系,并用t记录值较大的结点编号
        if( h[ i] < h[ i*2] )
            t=i*2;
        else
            t=i;
        //如果他有右儿子的情况下,再对右儿子进行讨论
        if(i*2+1 <= n)
        {
            //如果右儿子的值更大,更新较小的结点编号
            if(h[ t] < h[ i*2+1])
                t=i*2+1;
        }
        //如果发现最大的结点编号不是自己,说明子结点中有比父结点更大的
        if(t!=i)
        {
            swap(t,i);//交换它们,注意swap函数需要自己来写
            i=t;//更新i为刚才与它交换的儿子结点的编号,便于接下来继续向下调整
        }
        else
            flag=1;//则否说明当前的父结点已经比两个子结点都要大了,不需要在进行调整了
    }
}

//建立堆的函数
void creat()
{
    int i;
    //从最后一个非叶结点到第1个结点依次进行向上调整
    for(i=n/2;i>=1;i--)
    {
        siftdown(i);
    }
}

//堆排序
void heapsort()
{
        while(n>1)
    {
                swap(1,n);
        n--;
        siftdown(1);
    }
}

int main()
{
    int i,num;
    //读入n个数
    scanf("%d",&num);

    for(i=1;i<=num;i++)
        scanf("%d",&h[ i]);
    n=num;   

    //建堆
    creat();

    //堆排序
    heapsort();

    //输出
    for(i=1;i<=num;i++)
        printf("%d ",h[ i]);

    getchar();
    getchar();
    return 0;
}

堆排序

#include<stdio.h>
#include<stdlib.h>
int n,i,t,sum=0;
int a[100];
int cmp ( const void *a , const void *b )

{
return *(int *)a - *(int *)b;
}
int main()
{

    for(i=1;i<=10;i++)
        scanf("%d ",&a[i]);

        qsort(a,10,sizeof(a[0]),cmp);
    for(i=1;i<=10;i++)
        printf("%d ",a[i]);

    return 0;
}

qsort

#include<stdio.h>
#include<stdlib.h>
int n,i,t,sum=0;
int a[100];
int cmp ( const void *a , const void *b )

{
return *(int *)a - *(int *)b;
}
int main()
{

    for(i=1;i<=10;i++)
        scanf("%d ",&a[i]);

        qsort(a,10,sizeof(a[0]),cmp);
    for(i=1;i<=10;i++)
        printf("%d ",a[i]);

    return 0;
}

堆排序 down函数

int main()
{
    int n,m,i,sx,sy,tx,ty,sum,max=0,mx,my;
    int next[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
    scanf("%d%d%d%d",&n,&m,&sx,&sy);
    for(i=0;i<n;i++)
        scanf("%s",a[i]);
        h=1;t=1;
        data[t].x=sx;
        data[t].y=sy;
        t++;
    while (h<t)
    {
        for(i=0;i<=3;i++)
        {
            tx=data[h].x+next[i][0];
            ty=data[h].y+next[i][1];
            if(tx<0 || ty< 0 || tx>n-1 || ty>m-1)
                continue ;
            if(a[tx][ty]==‘.‘ && book[tx][ty]==0)
            {
                book[tx][ty]=1;
                data[t].x=tx;
                data[t].y=ty;
                t++;
                sum=enemy(tx,ty);
                if(sum>max)
                {
                    max=sum;
                    mx=tx;
                    my=ty;
                }
            }
        }
    h++;
    }

广搜

时间: 2024-10-25 20:22:41

应试记录3的相关文章

NOIP 11.01 应试记录

快排代码 void quicksort(int left,int right) { int u,j,t,temp; if(letf>right) return; temp=a[left]; i=left; j=right; while(i!=j) { while(a[j]>=temp && i<j) j--; while(a[i]<=temp && i<j) i++; if(i<j) { t=a[i]; a[i]=a[j]; a[j]=t

回忆我的大学——大学图书馆借书记录

回忆我的大学——大学图书馆借书记录 大四学年(人生有时候必须选择) 单片机系统的PROTEUS设计与仿真 1366663 B1206673 2009-6-3 19:30:38 借书 曾国藩,血祭 809063 B0637860 2009-5-29 17:23:11 借书 李自成.第五卷 701985 B0178241 2009-5-22 20:24:30 借书 李自成.第五卷 701979 B0177977 2009-5-18 18:25:16 借书 李自成.第四卷 701977 B017781

老男孩Linux运维第41期20170917开班第四周学习重点课堂记录

第1章 必知必会文件 配置文件位置 该文件作用 /etc/sysconfig/network-scripts/ifcfg-eth0 第一块网卡的配置文件 同setup中的network /etc/resolv.conf 客户端DNS配置文件,优先级低于网卡配置文件 /etc/hosts 主要作用是定义IP地址和主机名的映射关系(域名解析),是一个映射IP地址和主机名的规定 /etc/sysconfig/network 用于配置hostname和networking /etc/fstab 开机自动

SSISDB8:查看SSISDB记录Package执行的消息

在执行Package时,SSISDB都会创建唯一的OperationID 和 ExecutionID,标识对package执行的操作和执行实例(Execution Instance),并记录operation message,统计executable的执行时间,便于developers 优化package的设计,对package进行故障排除. 一,在package发生错误时,查看失败的Executable An executable is a task or container that you

使用插件bootstrap-table实现表格记录的查询、分页、排序等处理

在业务系统开发中,对表格记录的查询.分页.排序等处理是非常常见的,在Web开发中,可以采用很多功能强大的插件来满足要求,且能极大的提高开发效率,本随笔介绍这个bootstrap-table是一款非常有名的开源表格插件,在很多项目中广泛的应用.Bootstrap-table插件提供了非常丰富的属性设置,可以实现查询.分页.排序.复选框.设置显示列.Card view视图.主从表显示.合并列.国际化处理等处理功能,而且该插件同时也提供了一些不错的扩展功能,如移动行.移动列位置等一些特殊的功能,插件可

Git 使用记录

在win7平台已经安装好了git的情况下: 1,Git 本地仓库建立与使用步骤: (2)新建立文件夹: $ mkdir learngit $ cd learngit $ pwd /Users/michael/learngit (1)引入git: 通过git init命令把这个目录变成Git可以管理的仓库: $ git init Initialized empty Git repository in /Users/michael/learngit/.git/ (3)添加文件:git add fil

前端学HTTP之日志记录

前面的话 几乎所有的服务器和代理都会记录下它们所处理的HTTP事务摘要.这么做出于一系列的原因:跟踪使用情况.安全性.计费.错误检测等等.本文将谥介绍日志记录 记录内容 大多数情况下,日志的记录出于两种原因:査找服务器或代理中存在的问题(比如,哪些请求失败了),或者是生成Web站点访问方式的统计信息.统计数据对市场营销.计费和容量规划(比如,决定是否需要增加服务器或带宽)都非常有用 可以把一个HTTP事务中所有的首部都记录下来,但对每天要处理数百万个事务的服务器和代理来说,这些数据的体积超大,很

ClientDataSet中动态添加计算字段并用计算字段显示记录的UpdateStatus

ClientDataSet中每条记录都有UpdateStatus=(usUnmodified, usModified, usInserted, usDeleted)记录该条数据是修改的,删除的,还是新增的等.有时候我们只想看修改的或新增的或删除的就可能用到这一属性.下图用计算字段显示UpdateStatus状态. ********************************************************************************************

MySQL删除重复记录的方法

参考网上的方法,总结了产出重复记录的方法,欢迎交流. 方法1:创建一个新表临时储存数据 假设我们有一个存在多个字段的表,表中有部分数据的若干字段重复,此时我们可以使用DISTINCT这个关键字对表数据进行筛选. 1 CREATE [TEMPORARY] TABLE temp LIKE origin_tb; 2 INSERT temp(attr1,attr2,...) SELECT DISTINCT attr1,attr2,... FROM origin_tb; 3 DELETE FROM ori