方法原理:
若是要找數組中第N大元素
使用快排每完成一輪排序,判斷基準數的索引 和 數組長度-N 的關係
索引 = 數組長度-N : 此基準數就是要找的第N大元素
索引 > 數組長度-N : 要找的元素在左邊
索引 < 數組長度-N : 要找的元素在右邊
import java.util.Random;
import java.util.Scanner;
public class quickSortSearch {
static int[] arr = new int[8];
static int N ;
public static void main(String[] args) {
for (int i = 0; i < arr.length; i++) {
arr[i]=new Random().nextInt(20)+1;
System.out.print(arr[i]+" ");
}
System.out.println();
System.out.println("請輸入查詢第幾大數:");
N = new Scanner(System.in).nextInt();
quickSort(0,arr.length-1);
}
public static void quickSort( int left , int right){
int i=left,j=right;
if(left>right)
return;
int standard= arr[left];
// 兩個眼睛不能碰面
while(i!=j) {
while (i < j && arr[j] >= standard)
j--;
while (i < j && arr[i] <= standard)
i++;
if (i != j) {
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
//最終將基準數歸位
arr[left]=arr[i];
arr[i]=standard;
if(i==arr.length-N){
System.out.println(arr[i]);
return;
}
else if(i>arr.length-N){ //在左邊
quickSort(left,i-1);
}
else
quickSort(i+1,right);
return ;
}
}
方法不適用於**數組中含有重複元素
就是有一個數組去重的問題
數組轉Set集合再轉到數組 沒搞明白