N个数中找到第K大的数值(C语实现)

本文介绍了如何在C语言中找到N个数中的第K大数值。首先尝试使用冒泡排序,但由于时间复杂度过高导致超时。然后采用快速排序的方法,通过一趟排序将数据分割,并根据K值定位到第K大的数。实测表明快速排序方法能够解决问题,但仍有优化空间。
摘要由CSDN通过智能技术生成
研究生了,选了计算机算法这门课程,这周布置了一个作业,在OJ上做:**N个数中找到第K大的数值**。大一简单学过C语言基础,目前只能用C语言编程,后续会学C++编程。
分享一份不超时的C语代码~

测试例子
在这里插入图片描述

思路
思路超简单,看到题目首先想到的就是先对N个数进行排序,再直接输出第K大的值即可。

1、最简单的方法就是冒泡排序(入门基础知识哈哈)
我试了下,成功超时了。因为冒泡排序要做的次数太多了,时间上还是不够的。代码如下:

#include <stdio.h>

int main(void) {
   
    int N,k;
    int *a;//定义指针a
    int i, j, t;
    scanf("%d %d\n", &N, &k);
    a=(int *)malloc(sizeof(int)*N);//定义一个baiint类型的指针变量dua,并申请zhin*sizeof(int)个字节(即4*n个字节)的dao存储空间。
    for (i = 1; i <= N; i++)
        scanf("%d", &a[i]);
    for (i 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值