操作系统---实验2---进程与线程---2022.10

参考资料:
Java生成不重复的随机数组的方法(这里用的是方法3)
冒泡排序

import java.util.Arrays;
import java.util.Random;

public class ThreeSort {
    public static void main(String[] args) {
        //生成一个不重复的随机数组
        int[] a = get_arr();

        BubbleSort bubbleSort = new BubbleSort(a);
        SelectSort selectSort = new SelectSort(a);
        QuickSort quickSort = new QuickSort(a);

        new Thread(bubbleSort, "冒泡排序").start();
        new Thread(selectSort, "选择排序").start();
        new Thread(quickSort, "快速排序").start();
    }

    public static int[] get_arr() {
        int[] a = new int[1000];
        RandomArr randomArr = new RandomArr(a);
        return a;
    }
}

class RandomArr {
    int a[];

    //生成一个不重复的随机数组
    public RandomArr(int[] a) {
        int min = 1, max = 1000;
        int len = max - min + 1;

        //初始化给定范围的待选数组
        int[] source = new int[len];
        for (int i = min; i < min + len; i++) {
            source[i - min] = i;
        }

        Random rd = new Random();
        int index = 0;
        for (int i = 0; i < 1000; i++) {
            //待选数组0到(len-2)随机一个下标
            index = Math.abs(rd.nextInt() % len--);
            //将随机到的数放入结果集
            a[i] = source[index];
            //将待选数组中被随机到的数,用待选数组(len-1)下标对应的数替换
            source[index] = source[len];
        }
        this.a = a;
    }
}

class BubbleSort implements Runnable {
    private int[] a;

    public BubbleSort(int[] a) {
        this.a = a;
    }

    @Override
    public void run() {
        //生成一个不重复的随机数组
        //int[] a = get_arr();
        System.out.println("冒泡--原数组:" + Arrays.toString(a));
        bubble_sort(a);
        System.out.println("冒泡--排序后:" + Arrays.toString(a));
    }

    public static int[] get_arr() {
        int[] a = new int[1000];
        RandomArr randomArr = new RandomArr(a);
        return a;
    }

    public static void bubble_sort(int[] a) {
        for (int i = 0; i < a.length - 1; i++) {
            // 比较相邻两个元素,较大的数往后冒泡
            for (int j = 0; j < a.length - 1 - i; j++) {
                if (a[j] > a[j + 1]) {
                    int temp = a[j + 1]; // 把第一个元素值保存到临时变量中
                    a[j + 1] = a[j]; // 把第二个元素值转移到第一个元素变量中
                    a[j] = temp; // 把临时变量(第一个元素的原值)保存到第二个元素中
                }
            }
        }
    }
}

class SelectSort implements Runnable {
    private int[] a;

    public SelectSort(int[] a) {
        this.a = a;
    }

    @Override
    public void run() {
        //生成一个不重复的随机数组
        //int[] a = get_arr();
        System.out.println("选择--原数组:" + Arrays.toString(a));
        select_sort(a);
        System.out.println("选择--排序后:" + Arrays.toString(a));
    }

    public static int[] get_arr() {
        int[] a = new int[1000];
        RandomArr randomArr = new RandomArr(a);
        return a;
    }

    public static void select_sort(int[] a) {
        for (int i = 0; i < a.length - 1; i++) {
            int minIndex = i; // 用来记录最小值的索引位置,默认值为i
            for (int j = i + 1; j < a.length; j++) {
                if (a[j] < a[minIndex]) {
                    minIndex = j; // 遍历 i+1~length 的值,找到其中最小值的位置
                }
            }
            // 交换当前索引 i 和最小值索引 minIndex 两处的值
            if (i != minIndex) {
                int temp = a[i];
                a[i] = a[minIndex];
                a[minIndex] = temp;
            }
            // 执行完一次循环,当前索引 i 处的值为最小值,直到循环结束即可完成排序
        }
    }
}

class QuickSort implements Runnable {
    private int[] a;

    public QuickSort(int[] a) {
        this.a = a;
    }

    @Override
    public void run() {
        //生成一个不重复的随机数组
        //int[] a = get_arr();
        System.out.println("快排--原数组:" + Arrays.toString(a));
        quick_sort(a, 0, a.length - 1);
        System.out.println("快排--排序后:" + Arrays.toString(a));
    }

    public static int[] get_arr() {
        int[] a = new int[1000];
        RandomArr randomArr = new RandomArr(a);
        return a;
    }

    public static void quick_sort(int[] q, int l, int r) {
        if (l >= r) return;
        int x = q[l + r >> 1], i = l - 1, j = r + 1;
        while (i < j) {
            while (q[++i] < x) ;
            while (q[--j] > x) ;
            if (i < j) {
                int t = q[i];
                q[i] = q[j];
                q[j] = t;
            }
        }
        quick_sort(q, l, j);
        quick_sort(q, j + 1, r);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值