作业帮 > 综合 > 作业

请用java语言编写排序程序.

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/16 19:16:53
请用java语言编写排序程序.
请编写一个多线程的程序,先产生一个大于10的随机整数n,再产生n个随机数并存放于数组中,然后创建两个线程并发地对所产生的随机数分别进行排序,其中,一个线程要求采用冒泡排序法进行排序,另一个线程要求采用快速排序法进行排序,最后比较这两个线程排序的结果,并输出先完成排序的线程.
参考代码如下,可以按需求自己修改import java.util.Date;
public class SortThread {
\x09public static void main(String[] args) {
\x09\x09//产生一个随机数组
\x09\x09int[] ary = getArray();
\x09\x09//启动冒泡排序线程
\x09\x09new Thread(new MaoPao(ary)).start();
\x09\x09//启动快速排序线程
\x09\x09new Thread(new KuaiSu(ary)).start();
\x09}
\x09private static int[] getArray() {
\x09\x09//建议数字n不要超过1百万,十万左右就好了
\x09\x09int n = (int) (Math.random()*1000000)+11;
\x09\x09int[] ary= new int[n];
\x09\x09\x09\x09System.out.println("n的值是" + n);
\x09\x09for (int i = 0; i < ary.length; i++) {
\x09\x09\x09ary[i] = (int) (Math.random()*100000);
\x09\x09}
\x09\x09return ary;
\x09}
}
//冒泡排序
class MaoPao implements Runnable {
\x09int[] ary;
\x09public MaoPao(int[] ary) {
\x09\x09this.ary = ary;
\x09}
\x09@Override
\x09public void run() {
\x09\x09long st = System.currentTimeMillis();
\x09\x09System.out.println(new Date() + "冒泡排序线程:开始执行排序");
\x09\x09for (int i = 0; i < ary.length - 1; i++) {
\x09\x09\x09for (int j = 0; j < ary.length - i - 1; j++) {
\x09\x09\x09\x09if (ary[j] < ary[j + 1]) {
\x09\x09\x09\x09\x09int temp = ary[j];
\x09\x09\x09\x09\x09ary[j] = ary[j + 1];
\x09\x09\x09\x09\x09ary[j + 1] = temp;
\x09\x09\x09\x09}
\x09\x09\x09}
\x09\x09}
\x09\x09long et = System.currentTimeMillis();
\x09\x09System.out.println(new Date() + "冒泡排序线程完成排序,耗费时间" + (et - st) + "毫秒");
\x09\x09for (int i = 0; i < ary.length; i++) {
\x09\x09\x09System.out.println(ary[i]+" ");
\x09\x09}
\x09}
}
//快速排序
class KuaiSu implements Runnable {
\x09int[] ary;
\x09public KuaiSu(int[] ary) {
\x09\x09this.ary = ary;
\x09}
\x09@Override
\x09public void run() {
\x09\x09long st = System.currentTimeMillis();
\x09\x09System.out.println(new Date() + "快速排序线程:开始执行排序");
\x09\x09quickSort(ary, 1, ary.length);
\x09\x09long et = System.currentTimeMillis();
\x09\x09System.out.println(new Date() + "快速排序线程排序完成,耗费时间" + (et - st) + "毫秒");
\x09\x09for (int i = 0; i < ary.length; i++) {
\x09\x09\x09System.out.println(ary[i]+" ");
\x09\x09}
\x09}

\x09public static int Partition(int a[], int p, int r) {
\x09\x09int x = a[r - 1];
\x09\x09int i = p - 1;
\x09\x09int temp;
\x09\x09for (int j = p; j <= r - 1; j++) {
\x09\x09\x09if (a[j - 1] <= x) {
\x09\x09\x09\x09i++;
\x09\x09\x09\x09temp = a[j - 1];
\x09\x09\x09\x09a[j - 1] = a[i - 1];
\x09\x09\x09\x09a[i - 1] = temp;
\x09\x09\x09}
\x09\x09}
\x09\x09temp = a[r - 1];
\x09\x09a[r - 1] = a[i + 1 - 1];
\x09\x09a[i + 1 - 1] = temp;
\x09\x09return i + 1;
\x09}
\x09public static void quickSort(int a[], int p, int r) {
\x09\x09if (p < r) {
\x09\x09\x09int q = Partition(a, p, r);
\x09\x09\x09quickSort(a, p, q - 1);
\x09\x09\x09quickSort(a, q + 1, r);
\x09\x09}
\x09}
}