Java 使用Scanner查找未排序数组中的第n个最小数

Java 使用Scanner查找未排序数组中的第n个最小数,java,arrays,java.util.scanner,Java,Arrays,Java.util.scanner,我浏览了论坛,找不到如何结合Scanner查找数组中的第n个最小数的示例,因此如果以前有人回答过这个问题,我很抱歉。另外,是否有任何方法可以显示程序为在数组中查找元素而进行的比较次数?如果有帮助的话,我已经附上了作业说明的图片 publicstaticvoidmain(字符串[]args){ System.out.println(“IDS201 HW3:\n”); System.out.println(“1.生成”+随机数+随机整数未排序列表。\n”); int[]randomNumbers=g

我浏览了论坛,找不到如何结合Scanner查找数组中的第n个最小数的示例,因此如果以前有人回答过这个问题,我很抱歉。另外,是否有任何方法可以显示程序为在数组中查找元素而进行的比较次数?如果有帮助的话,我已经附上了作业说明的图片

publicstaticvoidmain(字符串[]args){
System.out.println(“IDS201 HW3:\n”);
System.out.println(“1.生成”+随机数+随机整数未排序列表。\n”);
int[]randomNumbers=generateRandomNUmbers();
系统输出打印(“\n2.搜索值?”);
扫描仪标准输入=新扫描仪(System.in);
int x=stdin.nextInt();
整数计数=搜索(随机数,x);
如果(计数=0){
System.out.println(x+“不在列表中”);
}
System.out.println(“\n3.对列表排序:”);
排序(随机数);
System.out.print(“现在排序后的数组是:\n\n”);
显示(随机数字);
} 
私有静态最终整数随机数计数=50;
专用静态无效显示(int[]随机数字){
整数计数=0;
对于(int i=0;i随机数[j]){
int temp=随机数[i];
随机数[i]=随机数[j];
随机数[j]=温度;
}
}
}
返回随机数;
}

}

您可以找到顺序统计算法,以在O(n)时间内找到第k个最小元素。对于Scanner部分,除了从命令行读取k并将其传递到算法中之外,不需要其他任何东西。与原始算法没有什么不同,两者都采用参数k,在本例中,从命令行读取参数k

注意:第k个最小元素问题还有其他方法,但速度较慢。例如,可以对数组进行排序,然后从最后一个索引中查找第k个元素。您还可以从给定链接上以前的条目中找到其他方法。

在这里:

import java.util.Scanner;
public class Main
{
  public static void main (String[]args)
  {
    System.out.println ("IDS201 HW3:\n");
    System.out.println ("1. Generate " + RANDOM_NUMBER_COUNT +
            " random integer unsorted list.\n");
    int[] randomNumbers = generateRandomNUmbers ();
      System.out.print ("\n2. Search value? ");
    Scanner stdin = new Scanner (System.in);
    int x = stdin.nextInt ();
    int count = search (randomNumbers, x);
    if (count == 0)
      {
    System.out.println (x + " is not in the list");
      }
    else
      {
    System.out.println ("compared " + count + " times to search");
      }
    System.out.print ("\n2. Nth Smallest value? ");
    int nth_value = stdin.nextInt ();
    System.out.print ("K'th smallest element is " +
              nth_search (randomNumbers, 0, RANDOM_NUMBER_COUNT-1,nth_value));
    System.out.println ("\n3. Sort the list:");
    sort (randomNumbers);
    System.out.print ("Now the Array after Sorting is :\n\n");
    display (randomNumbers);
  }

  private static final int RANDOM_NUMBER_COUNT = 50;

  private static int partition (int[]randomNumbers, int l, int r)
  {
    int x = randomNumbers[r], i = l;
    for (int j = l; j <= r - 1; j++)
      {
    if (randomNumbers[j] <= x)
      {
        int temp = randomNumbers[i];
        randomNumbers[i] = randomNumbers[j];
        randomNumbers[j] = temp;
        i++;
      }
      }
    int temp = randomNumbers[i];
    randomNumbers[i] = randomNumbers[r];
    randomNumbers[r] = temp;
    return i;
  }


  private static void display (int[]randomNumbers)
  {
    int count = 0;
    for (int i = 0; i < RANDOM_NUMBER_COUNT; i++)
      {
    System.out.print (randomNumbers[i] + ",");
    count++;
    if (count == 10)
      {
        System.out.println ();
        count = 0;
      }
      }
  }

  private static int[] generateRandomNUmbers ()
  {
    int[] randomNumbers = new int[RANDOM_NUMBER_COUNT];
    for (int index = 0; index < RANDOM_NUMBER_COUNT; index++)
      {
    randomNumbers[index] = (int) (Math.random () * 100);
      }
    display (randomNumbers);
    return randomNumbers;
  }

  private static int search (int[]randomNumbers, int x)
  {
    int i;
    int count = 0;
    for (i = 0; i < randomNumbers.length; i++)
      {
    if (randomNumbers[i] == x)
      {
        System.out.println ("\nFound " + x + " in array [" + i + "]");
        count++;
      }
      }
    return count;
  }

  private static int nth_search (int[]randomNumbers, int l, int r, int k)
  {
    if (k > 0 && k <= r - l +1)
      {
    int pos = partition (randomNumbers, l, r);
    if (pos - l == k - 1)
      return randomNumbers[pos];
    if (pos - l > k - 1)
      return nth_search (randomNumbers, l, pos - 1, k);
    return nth_search (randomNumbers, pos + 1, r, k - pos + l - 1);
      }
    return -1;
  }

  private static int[] sort (int[]randomNumbers)
  {
    int size = randomNumbers.length;
    for (int i = 0; i < size; i++)
      {
    for (int j = i + 1; j < size; j++)
      {
        if (randomNumbers[i] > randomNumbers[j])
          {
        int temp = randomNumbers[i];
        randomNumbers[i] = randomNumbers[j];
        randomNumbers[j] = temp;
          }
      }
      }
    return randomNumbers;
  }
}

import java.util.Scanner;
公共班机
{
公共静态void main(字符串[]args)
{
System.out.println(“IDS201 HW3:\n”);
System.out.println(“1.生成”+随机数\u计数+
“随机整数未排序列表。\n”);
int[]randomNumbers=generateRandomNUmbers();
System.out.print(“\n2.搜索值?”);
扫描仪标准输入=新扫描仪(System.in);
intx=stdin.nextInt();
整数计数=搜索(随机数,x);
如果(计数=0)
{
System.out.println(x+“不在列表中”);
}
其他的
{
System.out.println(“比较”+计数+搜索次数”);
}
System.out.print(“\n2.n最小值?”);
int n_value=stdin.nextInt();
System.out.print(“第K个最小元素为”+
第n个搜索(随机数,0,随机数,计数-1,第n个值);
System.out.println(“\n3.对列表排序:”);
排序(随机数);
System.out.print(“现在排序后的数组是:\n\n”);
显示(随机数字);
}
私有静态最终整数随机数计数=50;
私有静态int分区(int[]随机数,int l,int r)
{
int x=随机数[r],i=l;
对于(int j=l;j随机数[j])
{
int temp=随机数[i];
随机数[i]=随机数[j];
随机数[j]=温度;
}
}
}
返回随机数;
}
}
n个最小项函数

private static int nth_search (int[]randomNumbers, int l, int r, int k)
  {
    if (k > 0 && k <= r - l +1)
      {
    int pos = partition (randomNumbers, l, r);
    if (pos - l == k - 1)
      return randomNumbers[pos];
    if (pos - l > k - 1)
      return nth_search (randomNumbers, l, pos - 1, k);
    return nth_search (randomNumbers, pos + 1, r, k - pos + l - 1);
      }
    return -1;
  }
private static int partition (int[]randomNumbers, int l, int r)
  {
    int x = randomNumbers[r], i = l;
    for (int j = l; j <= r - 1; j++)
      {
    if (randomNumbers[j] <= x)
      {
        int temp = randomNumbers[i];
        randomNumbers[i] = randomNumbers[j];
        randomNumbers[j] = temp;
        i++;
      }
      }
    int temp = randomNumbers[i];
    randomNumbers[i] = randomNumbers[r];
    randomNumbers[r] = temp;
    return i;
  }

私有静态整数n次搜索(int[]随机数,int l,int r,int k)
{
如果(k>0&&k k-1)
返回第n次搜索(随机数,l,位置-1,k);
返回第n次搜索(随机数,pos+1,r,k-pos+l-1);
}
返回-1;
}
和第二功能

private static int nth_search (int[]randomNumbers, int l, int r, int k)
  {
    if (k > 0 && k <= r - l +1)
      {
    int pos = partition (randomNumbers, l, r);
    if (pos - l == k - 1)
      return randomNumbers[pos];
    if (pos - l > k - 1)
      return nth_search (randomNumbers, l, pos - 1, k);
    return nth_search (randomNumbers, pos + 1, r, k - pos + l - 1);
      }
    return -1;
  }
private static int partition (int[]randomNumbers, int l, int r)
  {
    int x = randomNumbers[r], i = l;
    for (int j = l; j <= r - 1; j++)
      {
    if (randomNumbers[j] <= x)
      {
        int temp = randomNumbers[i];
        randomNumbers[i] = randomNumbers[j];
        randomNumbers[j] = temp;
        i++;
      }
      }
    int temp = randomNumbers[i];
    randomNumbers[i] = randomNumbers[r];
    randomNumbers[r] = temp;
    return i;
  }

私有静态int分区(int[]随机数,int l,int r)
{
int x=随机数[r],i=l;

对于(int j=l;j您的问题是查找数组中的第n个最小数,但您的代码搜索列表中有多少个从扫描仪读取的元素实例。此外,使用扫描仪与搜索数组中的第n个最小数有什么不同?@CanBayar谢谢您的评论。我必须找到insta的数量我认为使用扫描器查找第n个最小的元素不同于直接将第n个最小的元素插入代码的程序