打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
算法设计与分析 2.9 线性时间选择

import java.util.Date;
import java.util.Random;

public class Select {
 
 private static int randomPartition(int[] data, int start, int end) {
  Random rand = new Random(new Date().getTime());
  int index = rand.nextInt(data.length);
  swap(data, 0, index);
  return partition(data, start, end);
 }
 private static int partition(int[] data, int start, int end) {
  int var = data[start];
  int i = start + 1;
  int j = end;
  for (;;) {
   while (data[i] < var)
    i++;
   while (data[j] > var)
    j--;
   if (i >= j)
    break;
   else
    swap(data, i, j);

  }
  data[start] = data[j];
  data[j] = var;
  return j;
 }

 private static void swap(int[] data, int i, int j) {
  int temp = data[i];
  data[i] = data[j];
  data[j] = temp;
 }

 public static int select(int[] data, int start, int end, int k) {
  if (start == end)
   return data[start];

  int mid = randomPartition(data, start, end);
  int size = mid - start + 1;
  if (k <= size)
   return select(data, start, mid, k);
  else
   return select(data, mid + 1, end, k - size);

 }
 
 public static void main(String[] args) {
  int[] data = {2, 1, 4, 5, 3,};
  System.out.println(select(data, 0, data.length - 1, 5));
 }
}

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
归并排序和归并排序应用(逆序对 小和)
205,查找-分块查找
知识点总结之排序算法
常用数据结构和算法汇集
「排序算法」—图解双轴快排
剑指offer 37 数字在排序数组中出现的次数
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服