利用快速排序思想求数组第k大元素
来源:互联网 发布:angelababy心机知乎 编辑:程序博客网 时间:2024/05/19 17:08
思路
快速排序中每次排序最后基准点所在的位置j代表它是第j大的元素,只要把j跟k相比,若j小于k,则只要在右半部分查找,等于k直接返回arr[j],否则在左半部分查找。这样算法的时间复杂度为O(n).程序如下:
public static int quicksort(int[] arr,int l,int r,int n){ int base = partition(arr,l,r); if(base == n-1){ //找到第n大元素直接返回 return arr[n-1]; }else if(base<n-1){ //在右半部分查找 return quicksort(arr, base+1, r,n); }else{ //在左半部分查找 return quicksort(arr, l, base-1,n); } } //返回已经排好的arr[j]索引j public static int partition(int[] arr,int l,int r){ int v = arr[l]; int i = l+1; int j = r; while(true){ while(i<=r && arr[i]<v) i++; while(j>=l+1 && arr[j]>v) j--; if(i>j) break; swap(arr, i, j); i++; j--; } swap(arr, l, j); return j; } public static int find(int[] arr,int k){ return quicksort(arr,0,arr.length-1,k) } public static void main(String[] args) { int[] test = new int[]{9,2,3,5,1,4,7,6,8,10,2,3}; System.out.println(find(test,4)); }
阅读全文
0 0
- 利用快速排序思想求数组第k大元素
- 利用快速排序思想找出数组中第K大的数
- 求两个排序数组的第K大元素--求全排列的第K大元素
- 巧妙利用快速排序法的原理求一个数组中的第10大元素
- 用快速排序的思想求第K大的数或最大的k个数
- 快速排序求第k小元素
- 利用快排思想找出数组中第k大的元素
- 用快速排序的思想求第K大的数值
- 求两个已排序的数组中所有元素的第K大(小)
- 快速找出第K大的元素 (快速排序)
- 用快速排序法寻找第k大元素
- 快速排序和查找第K大元素
- 找包含N个元素的数组里第K大的元素(引申:快速排序、找中位数、找前K大的元素)的时间复杂度
- 【算法】快速排序/数组第K小的元素
- 利用随机化的思想求n个元素当中第k小的元素
- 利用快速排序找到第k大的数字
- 两个排序的数组,找到第k大的元素
- 算法导论学习之线性时间求第k小元素+堆思想求前k大元素
- Stability of Recommendation Algorithms
- PullToRefreshScrollView 上拉下拉刷新 时间
- 欢迎使用CSDN-markdown编辑器
- 内核报错arch/arm/mach-s3c2440/built-in.o: undefined reference to `s3c24xx_spi_gpiocfg_bus0_gpe11_12_13'
- 汇编指令长度的判断
- 利用快速排序思想求数组第k大元素
- Linux Tomcat日志查看实用命令
- 拥有两棵枣树的世界
- jackson 的简单应用
- Maven安装及配置
- 单调队列---滑窗法
- 初识Linux--安装Ubuntu
- 高可复用接口返回类
- httpclient_demo new thread 线程