算法导论-随机选择RandomizedSelection-java实现

本文介绍了一个基于随机化选择算法的Java实现,该算法能够在未排序的数组中找到第i小的元素,通过随机化分区来提高效率。文章包含了完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.util.Random;


public class RandomizedSelect {

 public static void main(String args[]){
  int[] data={
    54,49,48,47,46,45,44,43,42,41,
    40,39,38,37,36,35,34,33,32,31,
    30,29,28,27,26,25,24,23,22,21,
    20,19,18,17,16,15,14,13,12,11,
    10,9,8,7,6,5,4,3,2,1
    };
  System.out.println(randomizedSelect(data,0,data.length-1,50));
 }

 private static int randomizedSelect(int[] A, int p, int r, int i) {
  int q,k;
  if(p==r)
   return A[p];
  q=randomizedPartition(A,p,r);
  k=q-p+1;
  if (i==k)
   return A[q];
  else if (i<k)
   return randomizedSelect(A,p,q-1,i);
  else
   return randomizedSelect(A,q+1,r,i-k);
 }

 private static int randomizedPartition(int[] A, int p, int r) {
  Random random=new Random();
  int i=random.nextInt(r-p)+p;
  int temp;
  temp=A[r];
  A[r]=A[i];
  A[i]=temp;
  return partition(A,p,r);
 }
 private static int partition(int[] A, int p, int r) {
  int temp;
  int i,x;
  x=A[r];
  i=p-1;
  for(int j=p;j<r;j++){
   if(A[j]<=x){
    i++;
    temp=A[i];
    A[i]=A[j];
    A[j]=temp;
   }
  }
  i++;
  temp=A[i];
  A[i]=A[r];
  A[r]=temp;
  return i;
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值