数据结构与算法分析C语言描述-1.1

#include <stdio.h>
#include <time.h>

/*将前k个元素读入数组并(以递减的顺序)对其排序。
   接着,将剩下的元素再逐个读入  如果它小于数组中的第k个元素则忽略
   否则 就将其放到数组中正确的位置上,同时将数组中的一个元素挤出数组
*/  

#define SWAP(x,y,t) ((t)=(x),(x)=(y),(y)=(t))

int  key(int *a,int len,int k);
int location(int *a,int len,int ins);
void insert(int *a,int len,int insKey);

int main(void){
    int count;
    printf("请输入元素的个数N:");
    scanf("%d",&count);
    int k=count/2;
    int time1=clock();
    int i;

    //输入的所有元素 保存在数组a  
    int a[count];
    
    //排序后的前k个元素 保存在数组b  
    int b[k];
    int input;
    
    for(i=0;i<count;i++){
        scanf("%d",&input);
        a[i]=input;
    }
    
    //将前k个元素赋值geib
    for(i=0;i<k;i++){
        b[i]=a[i];
    }
    
    for(i=0;i<k;i++){
        printf("%d ",b[i]);
    }
    printf("\n");
    //对b进行排序
    BubbleSort(b,k);
    for(i=0;i<k;i++){
        printf("%d ",b[i]);
    }
    printf("\n");
    
    //插入操作
    for(i=k;i<count;i++){
        if(a[i]>b[k-1])
            insert(b,k,a[i]);
    }
    int time2=clock();
    printf("%d time:\%lf",b[k-1],(time2-time1));
    
    return 0;
}

 

//降序后返回最小的值
int  key(int *a,int len,int k){
    int i,j,tmp;
    for(i=0;i<len-1;i++){
        for(j=0;j<len-1-i;j++){
            if(*(a+j)<*(a+j+1)){
                SWAP(*(a+j),*(a+j+1),tmp);
            }
        }
    }    
    return *(a+k-1);
}


//插入操作(要插入的数组,数组长度,插入的值)
void insert(int *a,int len,int insKey){
    int locat;
    locat=location(a,len,insKey);
    int tmp[len];
    for(int i=0;i<len;i++){
        tmp[i]=*(a+i);
    }
    for(int i=locat;i<len-1;i++){
        *(a+i+1)=tmp[i];
    }
    *(a+locat)=insKey;  
}


//得到插入位置(插入数组,数组长度,插入的值)
int location(int *a,int len,int ins){
    int i=0;
    while(ins<*(a+i)&&i<len){
        i++;
    }
    if(i<len){
        return i;    
    }else{
        printf("未找到插入位置");
        return -1;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值