找出数组中第K大的数值
来源:互联网 发布:泰民kai知乎 编辑:程序博客网 时间:2024/05/22 04:57
使用快速选择算法 quickSelect
pivot为随机取法
#include <stdio.h>#include <stdlib.h>void swap(int& a, int& b){int tmp = a;a = b;b = tmp;};int partition(int* arr, int l, int r){int random = rand() % (r - l + 1);int pivotIdx = l + random;swap(arr[pivotIdx], arr[r]);int pivot = arr[r];int front = l;for(int i = l; i < r; i++){if(arr[i] < pivot){swap(arr[i], arr[front]);front++;}}swap(arr[front], arr[r]);return front;};int quickSelect(int* arr, int k, int l, int r){if(l < r){int pivot = partition(arr, l, r);if(pivot == k - 1)return arr[pivot];else if(pivot < k - 1)return quickSelect(arr, k, pivot + 1, r);else return quickSelect(arr, k, l, pivot - 1);}};int main(){srand(10);int a[] = {5, 1, 2, 3, 4, 7, 6};int res = quickSelect(a, 7, 0, 6);return 0;}
- 找出数组中第K大的数值
- 数组中找出第k大的值
- 数组中找出第k大的值
- 找出数组中第K大的数
- 找出数组中第k大的数
- 找出数组中第 K 大的数
- 找出第K大的数<数组>
- 找出大数组array中第k大的元素(要求时间复杂度O(1))
- 算法(三)找出数组中第K大元素
- 无序数组找出其中的第K大的数
- 数组中找出第二个最大的元素(第k大的元素)
- 数组试题---找出第k大的数
- 找出数组中的第K大的元素
- 在升序排列的2个数组中找到第K大的数值
- 面试题—— 找出一个无序整型数组中第k大的数。
- 算法之每日一题:找出无序数组中第k大的数字
- 利用快速排序思想找出数组中第K大的数
- 利用快排思想找出数组中第k大的元素
- 几个简单有趣的算法
- android j2me j2se跨平台之感慨
- 恢复Windows的主引导记录(MBR)
- 邹晓辉公开提出自然语言理解的形式化双重路径与第六代编程语言及其三类双语协同计算平台
- 病毒营销的六个基本要素:
- 找出数组中第K大的数值
- 「洗脑」利用了哪些心理学原理?人脑发生了哪些生理变化?
- 关于国内某CMS系统备份文件命名规则产生的爆破字典挫码
- Tank大战0.8 版本
- OS X:实用脚本程序系列-18
- XSLT(1) XSLT and XPath Reference
- 现实生活中,很多中年人碰到不明白的事、物,为什么很少有“打破砂锅问到底”的精神?大多数都不懂装懂,继而慢慢忽视、遗忘?
- 传销心理学与洗脑
- 之前有研究过企业文化与洗脑之间的关系,对洗脑有一些了解,分享一下,可能不全面。