基于快速排序的TOPK算法
来源:互联网 发布:mac上好用的手绘软件 编辑:程序博客网 时间:2024/06/10 18:24
类似于快速排序,首先选择一个划分元,如果这个划分元的序号index刚好等于k,那么这个划分元以及左边的数,刚好组成了top-k small data;如果index>k, 那top-k small data在index的左边,那么就继续递归从index-1和数中选取top-k.如果index < k,那么说明还要从index的右边,选取top-(k-index) small data.
代码如下:
public class TopK_Quick {public static int Partition(int a[],int low,int high){a[0]=a[low];int pivokey = a[low];while(low<high){while(low<high && a[high]>=pivokey) --high;a[low] = a[high];while(low<high && a[low]<=pivokey) ++low;a[high]= a[low];}a[low]=a[0];return low;}public static void display(int a[],int k){for(int i=1;i<=k;i++){System.out.print(a[i]+" ");}}public static int selectK(int a[],int start,int end,int k){int index = 0;if(start<end){index = Partition(a,start,end);if(index == k)//正好找到第k大的数{index = k;}else if(index < k)//还要从index的右边找k-index个数{index = selectK(a,index+1,end,k-index);}else if(index > k)//k个数都在Index的左边{index = selectK(a,start,index-1,k);}}return index;}public static void main(String args[]){int k=0;int a[]={0,49,38,29,65,97,76,13,27,49,22,19};if(k>0&&k<=a.length-1){selectK(a,1,a.length-1,k);display(a,k);}else{System.out.println("Are You Kidding Me?");}}}
- 基于快速排序的TOPK算法
- TopK-快速选择算法
- 快速排序的两种改进方法算法及topK问题求解
- python---的topk算法
- 基于JAVA的排序算法之五--快速排序
- 排序算法,堆算法实现TopK
- 排序算法,堆算法实现TopK
- 基于随机数作为基数的快速排序算法 quick_sort
- 基于快速排序思想的三个算法题
- 【算法】快速排序——基于分治思想的实现
- 算法<基于三路划分的快速排序>
- <算法>基于三路划分的链表快速排序
- 基于快速排序的几种算法变型
- Java 实现 堆排序 快速排序 以及 TopK问题(一)
- Java 实现 堆排序 快速排序 以及 TopK问题(二)
- TopK算法
- TopK算法
- TopK算法
- 提高数据库并发性能概要
- Android 启动流程
- Java中的构造方法
- C语言宏定义技巧
- LPC_11C14平台I2C分析
- 基于快速排序的TOPK算法
- 也谈字节对齐带来效率的差异
- 15周任务2
- Unable to convert MySQL date/time value to System.DateTime
- JDBC调用存储过程
- java语句及数组知识总结
- 数据库的查询
- Flash与Flex配合开发,flash导出swc到flex
- linux driver 中断下半部实现方法总结