算法实践篇-基于快速排序原理的选择第i小元选择算法
2014-03-18 14:51
169 查看
package com.sort; import java.util.Random; public class RandomSelect { public static int randomSelect(int [] data,int p,int r,int i){ if(p==r){ return data[p]; } int q=partition(data,p,r); int k=q-p+1; if(i==k){ return data[q]; }else if(i<k){ return randomSelect(data,p,q-1,i); }else{ return randomSelect(data,q+1,r,i-k); } } private static int partition(int []data ,int p,int r){ int random=new Random().nextInt(r-p)+p; int tmpR=data[random]; data[random]=data[r]; data[r]=tmpR; int x=data[r]; int i=p-1; for(int j=p;j<=r-1;j++){ if(data[j]<=x){ i=i+1; int tmp=data[i]; data[i]=data[j]; data[j]=tmp; } } int tmp=data[i+1]; data[i+1]=data[r]; data[r]=tmp; return i+1; } public static void main(String[] args) { int [] data=new int[]{1,8,3,7,5,4,2,9}; for(int i=0;i<data.length;i++){ System.out.print(data[i]+" "); } System.out.println(); int select=randomSelect(data,0,data.length-1,4); System.out.println(select); } }
相关文章推荐
- 算法兴趣----- 一亿数据获取前100个最大值(仅供参考,基于快速排序的实现时间不稳定,基于最小堆实现。如果我们只要求前K个最大(小)值的时候,用堆是最好的选择,因为这里不用每次都排序了)
- 《机器学习:算法原理与编程实践》的读书笔记:SMO部分最难,大部分代码基于Scikit-Learn,决策树其实用处不大
- [置顶] Hadoop伪分布安装详解+MapReduce运行原理+基于MapReduce的KNN算法实现
- 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果。
- 基于xmpp openfire smack开发之Android消息推送技术原理分析和实践[4]
- 基于MeanShift的Camshift算法原理详解(整理)
- 基于matlab的图像阈值分割算法---参数法(自动阈值选择)
- [安全] 关于 RSA 算法的原理与实践
- Python实现的选择排序算法原理与用法实例分析
- Java实现基于数值编码原理的组合算法(单线程)
- 数据结构实践——置换-选择算法模拟
- 快速排序里的学问:枢纽元选择与算法效率
- 深度学习算法实践15---堆叠去噪自动编码机(SdA)原理及实现
- 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果(转)
- [机器学习]-Adaboost提升算法从原理到实践
- 第十六周上机实践项目1 - 验证算法(快速排序)
- 第十六周上机实践—项目1(4)—验证算法 冒泡排序 直接选择排序
- 基于直方图的图像全局二值化算法原理、实现--基于双峰平均值的阈值
- 数据挖掘系列(8)朴素贝叶斯分类算法原理与实践
- 基于xmpp openfire smack开发之Android消息推送技术原理分析和实践[4]