选择问题——N个数中选择第K个最大数

来源:互联网 发布:淘宝 手机 退货地址 编辑:程序博客网 时间:2024/05/18 00:05

解法一:将N个数以递减顺序排序,输出第K个位置上的元素。

package kMax;import java.util.Scanner;public class max {public static void main(String[] args){int n;int k;int a[] = new int [100];Scanner s = new Scanner(System.in);n = s.nextInt();k = s.nextInt();for(int i = 0;i < n;i ++){a[i] = s.nextInt();}int t = 0;for(int i = 0;i < n-1; i++)for(int j = 0;j < n-1-i; j++){if(a[j+1] > a[j]){t = a[j];a[j] = a[j+1];a[j+1] = t;}}System.out.println(a[k-1]);}}


解法二:先把前K个元素读入数组并对其以递减顺序排序,再将剩下的元素再逐个读入。当新元素被读到时,如果它小于数组中第K个元素则忽略,否则就将其放到数组的正确位置上,同时将数组的一个元素挤出数组。算法终止时,位于第K个位置上的元素即为所求。

package kMax;import java.util.Scanner;public class max {public static void main(String[] args){int n,k;Scanner s = new Scanner(System.in);int a[] = new int[100];n = s.nextInt();k = s.nextInt();for(int i = 0;i < k; i++){a[i] = s.nextInt();}sort(a,k);int m;for(int i = 0;i < n - k; i++){m = s.nextInt();if(m > a[k-1]){a[k-1] = m;    sort(a,k);}}System.out.println(a[k-1]);}//冒泡排序public static void sort(int a[], int n){int t;for(int i = 0;i < n-1; i++)for(int j = 0;j < n-1-i; j++){if(a[j+1] > a[j]){t = a[j];a[j] = a[j+1];a[j+1] = t;}}}}



阅读全文
0 0
原创粉丝点击