Java原始碼-N個數字中第k個最大值的求解方法
<pre class="java" name="code">import java.util.Scanner; import java.util.ArrayList; //n個數,求最大的數字中的第k個 public class HelloSort { public static void main(String[] args){ Scanner input=new Scanner(System.in); int count=0; ArrayList<Double> numbers=new ArrayList<Double> (); double entry=0; do { System.out.print("請輸入數字(輸入-1結束輸入):"); entry=input.nextDouble(); if(entry==-1) System.out.printf("已完成輸入%n"); else { numbers.add((Double)entry); count++; } } while(entry!=-1); double[] sortedNumbers=new double[count]; for (int i=0;i<count;i++) sortedNumbers[i]=numbers.get(i); /*核心演算法:用陣列中未排序部分的第一個數和其後面所有數字比較,如果後面數字大,則互換位置 這樣可保證排在前面的數字是最大的,n個數需要迴圈n-1次*/ double temp=0; for (int i=0;i<count-1;i++){ for (int j=i+1;j<count;j++){ if (sortedNumbers[j]>sortedNumbers[i]){ temp=sortedNumbers[j]; sortedNumbers[j]=sortedNumbers[i]; sortedNumbers[i]=temp; } } } System.out.print("請輸入k值:"); int k=input.nextInt(); System.out.printf("共輸入了%d個數,分別為:",count); for (int i=0;i<count;i++){ System.out.printf(numbers.get(i)+"\t"); } System.out.printf("%n從大到小的排序為:"); for (int i=0;i<count;i++){ System.out.print(sortedNumbers[i]+"\t"); } System.out.printf("%n最大的數字中的第"+k+"個為:"+sortedNumbers[k-1]+"%n%n"); } }
執行結果: 請輸入數字(輸入-1結束輸入):1.11
請輸入數字(輸入-1結束輸入):2.12
請輸入數字(輸入-1結束輸入):3.14159
請輸入數字(輸入-1結束輸入):1.414
請輸入數字(輸入-1結束輸入):-0.707
請輸入數字(輸入-1結束輸入):-2.235
請輸入數字(輸入-1結束輸入):5.325
請輸入數字(輸入-1結束輸入):6.876
請輸入數字(輸入-1結束輸入):16.50
請輸入數字(輸入-1結束輸入):205.0698
請輸入數字(輸入-1結束輸入):-1
已完成輸入
請輸入k值:6
共輸入了10個數,分別為:1.11 2.12 3.14159 1.414 -0.707 -2.235 5.325 6.876 16.5 205.0698
從大到小的排序為:205.0698 16.5 6.876 5.325 3.14159 2.12 1.414 1.11 -0.707 -2.235
最大的數字中的第6個為:2.12