排序的各种方法,持续补充……

1.利用线程池(有意思但是不切实际,浪费性能)

import java.util.List;
import java.util.Random;
import java.util.Vector;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.IntStream;

/**
 * 利用并发线程池排序
 */
public class TestSortByConcurrentThread {

    public static int[] getRandomArray(int len, int maxNum) {
        int[] res = new int[len];
        Random random = new Random();
        for (int i = 0; i < len; i++) {
            res[i] = random.nextInt(maxNum);
        }
        return res;
    }

    public static void main(String[] args) {
        System.out.println(sleepSort(getRandomArray(18, 29)));
    }

    public static List sleepSort(int[] nums) {
        List res = new Vector<>(); 
        ExecutorService executor = Executors.newFixedThreadPool(nums.length);
        IntStream.of(nums).forEach(i -> executor.execute(() -> {
            try {
                Thread.sleep(i * 20); 
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            res.add(i);
        }));
        /*for (int num : nums) {
            executor.execute(new Runnable() {
                @Override
                public void run() {
                    try {
                        Thread.sleep(num * 20);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    res.add(num);
                }
            });
        }*/
        executor.shutdown();
        while (true) {
            if (executor.isTerminated())
                break;
        }
        return res;
    }
}

2其他排序,待续…

你可能感兴趣的:(排序的各种方法,持续补充……)