选择问题1

来源:互联网 发布:手机淘宝上架图片尺寸 编辑:程序博客网 时间:2024/06/03 21:32

任务和代码:对于任意一串数字,输出第k大的数

/*文件名:main.c作者:小风景完成日期:2016.7.31问题描述:对于任意一串数字,输出第k大的数程序输出:*/#include <stdio.h>#include <malloc.h>#include <stdlib.h>void sortnumber(int *a,int k);void insertnumber(int *a,int k,int number);int main(){    int number = 0;    int k = 0;    int *p = NULL;    printf("请输入要查询的数据元素个数:");    scanf("%d",&number);    //清空缓存,防止影响下一次的输入    fflush(stdin);    printf("请输入%d个数据元素:",number);    //先将输入的数据读入到数组中保存起来,防止在输入途中断电,缓存中数据不能保留    int a[number] = {0};    int i = 0;    for(i = 0;i < number;i++)    {        scanf("%d",&a[i]);    }    fflush(stdin);    printf("您需要查询第几大的数:");    scanf("%d",&k);    p = (int *)malloc(k * sizeof(int));  //为指针动态分配空间    //对于需要查询的数据所处的位数不能大于数据的总数    if(k > number)    {        printf("您的输入不正确!\n");        free(p);        exit(1);    }    //先将需要查询的前k个数输入到指针所指向的空间中    for(i = 0;i < k;i++)    {        *(p + i) = a[i];    }    //将指针中的数据进行排序    sortnumber(p,k);    //依次传入后续的数据并且将其与指针所指向的内容进行比较    for(i = k;i < number;i++)    {        insertnumber(p,k,a[i]);    }    //释放分配的空间,输出结果    printf("第%d大的数是:%d",k,*(p + k - 1));    free(p);    return 0;}/*函数功能:使用冒泡排序对指针指向的空间数据进行排序*/void sortnumber(int *a,int k){    int i = 0;    int j = 0;    int temp = 0;    for(i = 0;i < k - 1;i++)    {        for(j = 0;j < k - i - 1;j++)        {            if(*(a + j + 1) > *(a + j))            {                temp = *(a+j+1);                *(a+j+1) = *(a + j);                *(a+j) = temp;            }        }    }}/*函数功能:比较第k个数与number,如果满足条件,将其插入*/void insertnumber(int *a,int k,int number){    int i = 0;    int j = 0;    if(*(a + k - 1) > number)    {        return;    }    else if(*a < number)    {        //将number放到第一位,然后后面的数字向后移位;        for(i = k - 1;i >0;i--)        {            *(a + i) = *(a + i - 1);        }        *a = number;        return;    }    //如果number大于数组中第i位数,将i位开始的数往后移位,将最后的数挤出数组,将number替换a[i]。    for(i = 1;i < k;i++)    {        if(number > *(a + i))        {            for(j = k - 1;j > i;j--)            {                *(a + j) = *(a + j - 1);            }            *(a + i)= number;            return;        }    }}


程序运行结果:


0 0
原创粉丝点击