查找最小的k个元素
来源:互联网 发布:手机彩票程序源码 编辑:程序博客网 时间:2024/06/05 15:37
1. 如果先对元素进行排序,复杂度为O(nlogn)
2. 使用小根堆,复杂度O(n) (建堆复杂度为O(n))
3. 使用类似快排的思想,平均复杂度为O(logn)
代码:
#include <iostream>using namespace std;int partition(int* array, int i, int j) { int key = array[i]; int left = i, right = j; while(left < right) { if(array[left+1] < key) { array[left] = array[left+1]; left ++; } else { int temp = array[right]; array[right] = array[left+1]; array[left+1] = temp; right --; } } array[left] = key; return left;}void printMinKeles(int* array, int len, int k) { // find k mins in array[left, right] int left = 0, right = len-1; while(1) { int p = partition(array, left, right); int num = p-left+1; if(num > k) { right = p-1; } else { for(int i = left; i <= p; i++) { cout << array[i] << " "; } if(num == k) break; k -= num; left = p+1; } } cout << endl;}int main() { int array[8] = {1, 2, 3, 4, 5, 6, 7, 8}; printMinKeles(array, 8, 4); int array1[8] = {8, 6, 7, 4, 3, 5, 2, 1}; printMinKeles(array1, 8, 4); int array2[8] = {8, 6, 6, 5, 2, 5, 2, 1}; printMinKeles(array2, 8, 4); return 0;}
- 查找最小的k个元素
- 查找最小的k个元素
- 查找最小的 k个元素
- 查找最小的 K 个元素
- 查找最小的k个元素
- 5.查找最小的k个元素
- 查找最小的k个元素
- 查找最小的k个元素
- 查找最小的k个元素
- 5.查找最小的k个元素
- 查找最小的k个元素(数组)
- 查找最小的K个元素
- 查找最小的K个元素
- 查找最小的k个元素
- 查找最小的k个元素[算法]
- 查找最小的k 个元素
- 查找最小的k个元素
- 查找最小的k个元素
- 统计数据的一种表达方式
- C#使用Excel的COM组件操作Excel
- flex3+blazeds+spring+hibernate整合小结
- Java学习笔记-解析Java对象的equals()和hashCode()的使用
- 《Windows核心编程系列》十谈谈同步设备IO与异步设备IO之异步IO
- 查找最小的k个元素
- 网页BOA控制ARM板的LED各文件分析
- 数据结构:栈的应用之中缀转后缀C++
- Design Pattern :Prototype
- 要工作去咯,博客暂停更新公告
- 二叉树
- 11g中使用FDA
- 菜鸟才写这个
- oracle sql 效率优化