빠른 정렬 서브루틴을 이용하여 중위수를 찾다

1375 단어 StringRandomClass
package net.liuyx.algorithm;

import java.util.Random;

public class QuickSelect {
    public static void main(String[] args) {
        int[] a = generateRandomArray();
        QuickSort.quickSort(a, 0, a.length - 1);
        arrayToString(a);
        System.out.println();
        int find = randomSelect(a, 0, a.length - 1, 3);
        System.out.println(find);
    }

    static int[] generateRandomArray() {
        Random rand = new Random();
        int[] b = new int[rand.nextInt(100)];
        for (int i = 0; i < b.length; i++)
            b[i] = rand.nextInt(100);
        return b;
    }

    static void arrayToString(int[] b) {
        for (int i : b) {
            System.out.print(i + " ");
        }
    }

    private static int randomSelect(int[] a, int p, int r, int theIthMin) {// theIthMin  i  , i  0,     ,i  1,      ,    ,i  a.length-1,     
        if (p == r)
            return a[p];
        else if (p < r) {
            int q = QuickSort.randomPartition(a, p, r);
            if (theIthMin == q)
                return a[q];
            else if (theIthMin < q)
                return randomSelect(a, p, q - 1, theIthMin);
            else
                return randomSelect(a, q + 1, r, theIthMin);
        } else
             throw new RuntimeException("       p        q");
    }

}

좋은 웹페이지 즐겨찾기