JavaScript 未排序数组中第 k 个最小/最大元素 (预期线性时间)

目录

例如

流程图

示例代码

参考资料


如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

未排序数组中第 k 个最小/最大元素 (预期线性时间)( K'th Smallest/Largest Element in Unsorted Array | Set 2 (Expected Linear Time))

给定一个数组和一个小于数组大小的数 k,我们需要找到数组中第 k 大的元素。已知数组中的所有元素都互不相同。

建议您先阅读以下文章,然后再阅读本文:

第k个最小元素:

C++ 第k个最小元素 C++ 第k个最小元素(K'th Smallest Element)-CSDN博客

C# 第k个最小元素 C# 第k个最小元素(K'th Smallest Element)-CSDN博客

Java 第k个最小元素 Java 第k个最小元素(K'th Smallest Element)_数组中第k小的数 java-CSDN博客

Python 第k个最小元素 Python 第k个最小元素(K'th Smallest Element)_最小的 k 个数 python代码-CSDN博客

JavaScript 第k个最小元素 JavaScript 第k个最小元素(K'th Smallest Element)-CSDN博客

例如

输入 :arr\[\] = {7, 10, 4, 3, 20, 15},

k = 3,

输出:7;

输入 :arr\[\] = {7, 10, 4, 3, 20, 15},

k = 4,

输出:10

在上面的文章(第k个最小元素 )中讨论了三种不同的解决方案。本文将讨论方法 4,它主要是对上面的文章(第k个最小元素)中讨论的方法 3(快速选择)的扩展。

流程图

示例代码

<script>

// Javascript program of above implementation

// This function returns k'th smallest element

// in arrl..r using QuickSort based method.

// ASSUMPTION: ALL ELEMENTS IN ARR\[\] ARE DISTINCT

function kthSmallest(arr, l, r, k)

{

// If k is smaller than number of

// elements in array

if (k > 0 && k <= r - l + 1)

{

// Partition the array around last

// element and get position of pivot

// element in sorted array

let pos = randomPartition(arr, l, r);

// If position is same as k

if (pos - l == k - 1)

{

return arrpos;

}

// If position is more,

// recur for left subarray

if (pos - l > k - 1)

{

return kthSmallest(arr, l, pos - 1, k);

}

// Else recur for right subarray

return kthSmallest(arr, pos + 1, r,

k - pos + l - 1);

}

// If k is more than number

// of elements in array

return Number.MAX_VALUE;

}

function swap(arr, i, j)

{

let temp = arri;

arri = arrj;

arrj = temp;

}

// Standard partition process of QuickSort().

// It considers the last element as pivot and

// moves all smaller element to left of it

// and greater elements to right

function partition(arr, l, r)

{

let x = arrr, i = l;

for(let j = l; j <= r - 1; j++)

{

if (arrj <= x)

{

swap(arr, i, j);

i++;

}

}

swap(arr, i, r);

return i;

}

function randomPartition(arr, l, r)

{

let n = r - l + 1;

let pivot = (Math.floor(Math.random() * 101)) % n;

swap(arr, l + pivot, r);

return partition(arr, l, r);

}

// Driver code

let arr = 12, 3, 5, 7, 4, 19, 26 ;

let n = arr.length, k = 3;

document.write("K'th smallest element is " +

kthSmallest(arr, 0, n - 1, k));

</script>

输出

K'th smallest element is 5

时间复杂度: O(N * log N)。

辅助空间: O(1)。

参考资料

C++ 第k个最小元素 C++ 第k个最小元素(K'th Smallest Element)-CSDN博客

C# 第k个最小元素 C# 第k个最小元素(K'th Smallest Element)-CSDN博客

Java 第k个最小元素 Java 第k个最小元素(K'th Smallest Element)_数组中第k小的数 java-CSDN博客

Python 第k个最小元素 Python 第k个最小元素(K'th Smallest Element)_最小的 k 个数 python代码-CSDN博客

JavaScript 第k个最小元素 JavaScript 第k个最小元素(K'th Smallest Element)-CSDN博客

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

相关推荐
少司府13 分钟前
嵌入式入门篇(二):初识STM32F103ZET6
linux·python·stm32·单片机·嵌入式硬件·mcu·嵌入式软件
打工仔折腾 AI1 小时前
Changedetection.io 网页变动监控:Docker 部署、通知配置与公网暴露实践
运维·人工智能·后端·python·docker·容器·性能优化
火云代理1 小时前
Python 使用代理 IP 前,先弄清 Requests 的配置来源与验证方法
网络·python·网络协议·tcp/ip·ip
2601_967979123 小时前
Python第七十四讲 异常处理完全精通 try-except零基础保姆级教程
python·异常处理·编程教程·错误处理·try-except
wuyk5553 小时前
Spider-第07讲-JSON接口与正则提取
爬虫·python·json
2601_967987374 小时前
Sqlite参考手册
数据库·python·sqlite·api·教程
用户019027581614 小时前
A 股到价提醒机器人:AlphaFeed + 飞书/钉钉 Webhook
python
特立独行的猫A5 小时前
Ionic + 仓颉语言的 cj-tauri 开发框架实战:开发精美移动端 APP
java·后端·python
高洁015 小时前
数据同化与动态状态估计:让孪生持续贴合现实
人工智能·python·深度学习·transformer·迁移学习
通信仿真爱好者5 小时前
第【139】期--基于深度学习的OFDM信道估计方法研究--python完整代码
python·深度学习·ofdm·信道估计