寻找第K大的数 C语言实现的一种方法

article/2025/9/30 15:09:03

描述

  • 在一个数组中,找到第K 大的数值
  • 一个数组,如:[3,2,1,5,6,4] ,输入 2,返回:5
  • 也就是这个K的取值,是从 1 开始的,不超过数组的最大个数

解决思路

  • 可以使用任意的排查函数,把这个数组进行排序,【从大到小排序】,第 1 个最大值,在 C语言的数组中,索引为 【0】,第 K 最大值,索引为:【K - 1】

C语言实现

  • 结合网络上找的 java 语言的实现方法,改为 C语言实现
  • 使用Visual Studio 2022 编译与调试通过
/* Visual Studio 2022 Compile */
#define _CRT_SECURE_NO_WARNINGS/** Find Kth Largest Number*/#include <stdio.h>
#include <string.h>
#include <stdlib.h>static int array_in[] = { 3,2,1,5,6,4 };/* array dump : for test */
void array_dump(int *array, int begin, int end)
{printf("\n");for (int i = begin; i <= end; i++){printf("array[%d] = %d\n", i, array[i]);}printf("\n");
}int find_kth(int *array, int start, int end, int k)
{int low = start;int high = end;int temp = array[low];while (low < high){/* 将小于中数值的数移动到数组左边 */while ((low < high) && (array[high] >= temp)){high--;}array[low] = array[high];/* 将大于中数值的数移动到数组右边 */while ((low < high) && (array[low] <= temp)){low++;}array[high] = array[low];}array[high] = temp;if (end - low + 1 == k){return temp;}else if (end - low + 1 > k){return find_kth(array, low + 1, end, k);}else{return find_kth(array, start, low - 1, k - (end - low + 1));}
}int main(void)
{int k_len = 0; /* 数组的长度 */int k_pos = 0x00; /* K 的位置 */int k_value = 0x00; /*  */k_len = sizeof(array_in) / sizeof(int);printf("array input is:\n");array_dump(array_in, 0, k_len - 1);printf("array length = %d\n", k_len);while (1){printf("\nPlease input then K position: ");scanf("%d", &k_pos);if ((k_pos == 0) || (k_pos > k_len)){printf("The input K position must in [1, %d]!\n", k_len);continue;}k_value = find_kth(array_in, 0, k_len - 1, k_pos);printf("The [%d]th largest number = %d\r\n", k_pos, k_value);}return 0;
}

测试过程

  • 经过测试,发现符合预期

在这里插入图片描述

小结

  • 这里没有使用经典的排序,如【冒泡排序】,使用了类似于【快速排序】
  • 初步了解一些基础算法的实现过程

http://chatgpt.dhexx.cn/article/On21o8uO.shtml

相关文章

C++——寻找第k大的数

给出一个数组&#xff0c;找出数组的第k大的数&#xff1a;基于快速排序的思路&#xff0c;每次快排后&#xff0c;基准的左边都是比其小的数&#xff0c;右边都是比其大的数&#xff0c;一次快排结束后&#xff0c;若基准所处的位置正好是第k大&#xff08;即基准右边有k-1个数…

面试题:从n个数中找出第K大的数

参考https://blog.csdn.net/orangefly0214/article/details/84997668的思路 从有n个元素的乱序数组中找出第k大的元素 方法1&#xff1a;基于冒泡排序和简单选择排序&#xff0c;时间复杂度o(n*k) 我们知道&#xff0c;在冒泡排序和简单选择排序中&#xff0c;最外层的循环每…

在N个数中查找第K大的数字(Top K问题)

在N个乱序数字中查找第k大的数字&#xff0c;时间复杂度可以减小至 O(N*logN)O(N)O(1)O(2) 答案&#xff1a;B 所谓“第&#xff08;前&#xff09;k大数问题”指的是在长度为n(n>k)的乱序数组中S找出从大到小顺序的第&#xff08;前&#xff09;k个数的问题。 注意&…

idea控制台乱码解决方法

一、问题情况&#xff1a; IntelliJ IDEA 控制台输出中文乱码部分如图所示&#xff1a; 二、解决方法&#xff1a; 1.打开tomcat配置页面&#xff0c;Edit Configurations。 2.选择项目部署的tomcat&#xff0c;在配置项VM options文本框中输入-Dfile.encodingUTF-8,点击Appl…

idea 控制台乱码问题的问题

工程(环境window10&#xff0c;gradle-6.8.3版本&#xff0c;编辑器IntelliJ IDEA 2019.3.4&#xff09; 一&#xff09;问题表现编译build的时候控制台带中文信息的会乱码 1、 找到Help->Editor Custom VM Options 2、 添加 -Dfile.encodingUTF-8 该设置是针对编辑器级别…

IDEA中控制台乱码的解决方式

1.在设置中的“文件编码”中将3个位置设为UTF-8&#xff0c;注&#xff1a;此处设置与控制台乱码无关&#xff0c;3处可均设为UTF-8或均设为系统默认值。 2.在Tomcat的“编辑配置”中&#xff0c;将VM options设为-Dfile.encodingGBK(与第三步类似&#xff0c;默认即为GBK)。…

IDEA控制台乱码终极解决办法

【关于IDEA中文乱码的终极解决方法】 查了很多资料&#xff0c;大多数博主都是修改四个地方&#xff1a;&#xff08;前四步&#xff09;如果前四步还是不行&#xff0c;可以看五、六步。第一步&#xff1a;idea 安装目录下/bin/idea.exe.vmoptions 和/bin/idea64.exe.vmoption…

IDEA控制台乱码解决

解决办法&#xff1a; 打开Intellij的安装的bin目录&#xff08;D:\Program Files\JetBrains\IntelliJ IDEA 14.0\bin &#xff09;&#xff0c;找到上图的两个文件&#xff08;根据你的系统是32位或64位选择其中一个配置文件&#xff09;&#xff0c;在配置文件中添加&#xf…

多种方法帮你解决tomcat项目部署,idea控制台乱码问题

解决在使用Tomcat过程中idea控制台出现的乱码问题 以下将介绍几种方法&#xff08;都是小编亲测实用的方法&#xff09;&#xff0c;尝试并寻找适合自己的方法即可 由于我已经处理过了乱码问题&#xff0c;我就重新配置一下 &#xff08;我有效解决的方案是把-Dfile.encoding…

idea 控制台乱码

1.我原来的修改idea的控制台乱码是 在ideasettings--Editor--File encodings修改为UTF-8 2.tomcat 中修改的conf logging.properties配置文件 由UTF-8修改为GBK 以上是我之前的修改.最近有个项目这样配置之后在项目运行的时候.有个页面要获取一个json字段.但是代码中有乱码的…

IDEA控制台乱码问题,原因解决方式,解决不了算我输

IDEA 控制台乱码问题 文章目录 IDEA 控制台乱码问题为了节省大家时间, 直接展示下我的编码配置方案我的编码配置原则我的编码配置 另外说一下几个重要但是和乱码无关的配置乱码原因解决方式我为什么推荐控制台使用 GBK我的编码设置思想第一种解决方案的弊端end 附加技巧如何找出…

解决idea控制台乱码

控制台乱码如下&#xff1a; 解决方案一&#xff1a;修改当前 Web 项目 Tomcat Server 的虚拟机输出选项 上方导航栏“Run→Edit Configurations…”进入配置页面&#xff0c;修改当前 Web 项目 Tomcat Server 的虚拟机输出选项 VM options 添加 -Dfile.encodingUTF-8 。重启&…

IDEA控制台乱码(已解决)

先来说说我遇到的问题&#xff0c;用IDEA打开项目首先可以保证编辑器内不会乱码&#xff0c;启动Tomcat后控制台出现乱码   我在网上找了很多方式都没有解决&#xff0c;大多数的方式由以下几种&#xff1a; 进入File->Settings->Editor->File Encodings 将右侧的所…

详细解决tomcat乱码 IDEA控制台乱码

1、启动Tomcat时打印出一大堆看不懂的文字 如下图&#xff1a; 原因&#xff1a;产生乱码的根本原因就是编码和解码不一致 解决办法&#xff1a;将打开tomcat的安装目录conf下的logging.properties文件&#xff0c;将java.util.logging.ConsoleHandler.encoding UTF-8 修改为…

MyBatis、IDEA控制台乱码

控制台乱码&#xff1a; 解决方法 在Maven模块的pom.xml中添加 <properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.buil…

【IDEA乱码解决方案】IDEA控制台乱码解决方案收集

乱码实例 如图&#xff1a; 我的解决方案 在“帮助”——“编辑自定义VM选项”中&#xff0c;最后一行加上代码&#xff1a; -Dfile.encodingUTF-8然后重启IDEA。 其他方案一&#xff1a;修改IDEA安装目录下的idea64.exe.vmoptions IDEA快捷方式右键->属性->打开文件所…

idea控制台乱码问题

1.控制台乱码 控制台tomcat启动信息乱码解决&#xff08;红色字体&#xff09; 1 在本地 tomcat 的配置文件中找到 logging.properties 文件设置日志输出的编码为 UTF-8 追加的配置信息为&#xff1a; java.util.logging.ConsoleHandler.encoding UTF-8 2 在IDEA中配置tomcat的…

解决IDEA控制台中文乱码问题(Tomcat、动态网页项目)

博主在使用idea的创建动态网页的时候&#xff0c;遇到了控制台中文乱码问题&#xff0c;在网上参考了多种解决方案之后&#xff0c;终于将问题成功解决。现在将自己遇到问题的情况和解决问题的方法总结如下&#xff1a; Idea控制台中文乱码问题通常有以下两种情况&#xff08;…

idea控制台中文乱码的解决方法(最后一种亲测有效)

idea控制台中文乱码的解决方法&#xff08;三种&#xff0c;亲测有效&#xff09; 问题情况&#xff1a; IntelliJ IDEA 控制台输出中文乱码部分如图所示&#xff1a; 解决方法&#xff1a; 方法一&#xff1a; 1.打开tomcat配置页面&#xff0c;Edit Configurations。 2…

解决IDEA控制台输出中文乱码问题

解决方法一&#xff1a; 1.打开tomcat配置页面&#xff0c;Edit Configurations。 2.在配置项VM options文本框中输入-Dfile.encodingUTF-8&#xff0c; 添加一条JAVA_TOOL_OPTIONS&#xff0c; 点击Apply&#xff0c;OK即可。 3.尝试重启Tomcat。 解决方法二&#xff1a…