C语言基础编程题:第 k 小整数(C语言版,采用冒泡排序)

1.题目描述



现有n个正整数,要求出这 n 个正整数中的第k个最小整数(相同大小的整数只计算一次)。

输入格式


第一行为 n 和 k; 第二行开始为 n 个正整数的值,整数间用空格隔开。

2.输出格式


第k个最小整数的值;若无解,则输出NO RESULT。

3.输入输出样例

输入1:
10 3
1 3 3 7 2 5 1 2 4 6
输出1:
3

4.说明/提示


n< 10000,k< 1000,正整数均小于 30000.

5.代码:

#include <stdio.h>
#include <stdlib.h>

void bubble_sort(int arr[], int n) {
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - 1 - i; j++) {
            if (arr[j] > arr[j + 1]) {
                // 交换
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

int main() {
    int n, k;
    scanf("%d %d", &n, &k);

    int *numbers = (int *)malloc(n * sizeof(int));
    for (int i = 0; i < n; i++) {
        scanf("%d", &numbers[i]);
    }

    // 对数组进行冒泡排序
    bubble_sort(numbers, n);

    // 使用一个数组来存储唯一值
    int *unique_numbers = (int *)malloc(n * sizeof(int));
    int unique_count = 0;

    // 去重
    for (int i = 0; i < n; i++) {
        if (i == 0 || numbers[i] != numbers[i - 1]) {
            unique_numbers[unique_count++] = numbers[i];
        }
    }

    // 检查是否存在第 k 个最小的唯一整数
    if (k <= unique_count) {
        printf("%d\n", unique_numbers[k - 1]);
    } else {
        printf("NO RESULT\n");
    }

    // 释放内存
    free(numbers);
    free(unique_numbers);

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

头顶一只喵喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值