JavaScript快速寻找数组中位数的Partion方法
需积分: 11 138 浏览量
更新于2024-12-19
收藏 657B ZIP 举报
资源摘要信息:"在计算机科学中,寻找中位数是一个常见的问题,尤其是在处理大量数据时。中位数是将一组数分为两部分的数,其中一部分的所有数都小于它,另一部分的所有数都大于它。如果数的个数是奇数,那么中位数就是中间的那个数;如果数的个数是偶数,中位数就是中间两个数的平均值。Partion寻找中位数是一种基于快速排序算法中partion操作的方法来查找中位数。这种方法的时间复杂度为O(n),远比排序所有元素后再寻找中位数的O(nlogn)要低。在JavaScript中实现Partion寻找中位数,主要是利用数组切分的思想,将数组分成两部分,使得左边部分的所有数都小于某个元素(基准元素),而右边部分的所有数都大于该元素。通过递归或迭代的方式对数组进行partion,直到找到中位数的位置。
JavaScript代码示例:
// JavaScript代码实现Partion寻找中位数
function partition(arr, left, right, pivotIndex) {
var pivotValue = arr[pivotIndex];
arr[pivotIndex] = arr[right];
arr[right] = pivotValue;
var storeIndex = left;
for (var i = left; i < right; i++) {
if (arr[i] < pivotValue) {
swap(arr, storeIndex, i);
storeIndex++;
}
}
swap(arr, right, storeIndex);
return storeIndex;
}
function quickSelect(arr, left, right, k_smallest) {
if (left === right) return arr[left];
var pivotIndex = partition(arr, left, right);
if (k_smallest === pivotIndex) {
return arr[k_smallest];
} else if (k_smallest < pivotIndex) {
return quickSelect(arr, left, pivotIndex - 1, k_smallest);
} else {
return quickSelect(arr, pivotIndex + 1, right, k_smallest);
}
}
function findMedian(arr) {
var length = arr.length;
if (length % 2 === 1) {
return quickSelect(arr, 0, length - 1, Math.floor(length / 2));
} else {
return 0.5 * (quickSelect(arr, 0, length - 1, length / 2 - 1) +
quickSelect(arr, 0, length - 1, length / 2));
}
}
// 交换数组中的两个元素
function swap(arr, i, j) {
var temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
// 示例数组
var numbers = [3, 5, 9, 7, 2, 8, 4, 1, 6];
// 寻找中位数
console.log(findMedian(numbers)); // 输出中位数
以上代码中,'partition'函数实现数组的partion操作,'quickSelect'函数用于快速选择一个位置的元素,'findMedian'函数则根据数组的长度是奇数还是偶数来计算中位数。这种方法的效率很高,适用于大数据集。"
【注意】: 代码示例中仅提供了基本的算法实现,实际使用时可能需要进行错误处理和边界条件检查以确保代码的健壮性。
2022-07-15 上传
2021-06-12 上传
点击了解资源详情
2024-09-12 上传
2024-09-12 上传
2023-06-01 上传
2023-06-06 上传
2023-06-13 上传
weixin_38628175
- 粉丝: 5
- 资源: 949
最新资源
- ng-simple-charts
- 基于HTML实现论坛社区网站_okphp BBS v4.0_okphpbbs(HTML源码+数据集+项目使用说明).rar
- 毕业设计 基于springboot+vue的DB社区-后端代码.zip
- rbf_RBF_
- 毕业设计,基于树莓派的远程温度监控系统设计.zip
- ELEGANT:优雅-一种有效解决片段引发的兼容性问题的工具
- inlg2021.github.io:这是INLG 2021网站的代码
- Fast-Files-Searching-source-code-in-java-Search source code
- accept:HTTP Accept- *标头解析
- sonarqube7.9中文插件包 sonar-l10n-zh-plugin-1.26.jar
- RECIPE News Tab-crx插件
- CSharpWebModule:C#Web Basic和ASP.NET CORE
- tla-fuzzer:各种顶级等待捆绑策略的模糊器
- nonogrid:javascript中的Nonogram游戏实现
- Python中国知网(cnki)爬虫及数据可视化分析设计毕业源码案例设计.zip
- Thousand-Game:简单的基于终端的多人骰子游戏,用Kotlin写成100%