几个排序算法比较

  • 采用多线程实现几个排序算法,比较各个排序算法的优劣;
  • java实现,一个主类,多个内部排序算法进程的接口,涉及到进程间的通信,因为每个进程包含自己的储存空间,无法直接访问其他线程的数据,可以在创建线程时,传入数据;
package app;import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.lang.Thread;class AppFrame extends JFrame
{//主类数据变量int[] Array = new int[20000];   //待排序数组Thread[] thread = new Thread[6];//进程数组,用于存储进程//构造函数public AppFrame() {thread[0] = new BubbleSortThread(0);thread[1] = new QuickSortThread(1);thread[2] = new SelectSortThread(2);thread[3] = new InsertSortThread(3);thread[4] = new HeapSortThread(4);thread[5] = new MergSortThread(5); }public void ThreadStart{for(int i=0;i<thread.length;i++){thread[i].start();//启动线程}}//内部类,各类排序算法线程class BubbleSortThread extends Thread implements Runnable{private int key;            //指定类线程在thread数组中的存储位置public BubbleSortThread(int k){key = k;}public void run()            //为每个进程重写run功能{//冒泡算法实现int[] bubble= new int[20000];System.arraycopy(Array, 0, bubble, 0, 20000);boolean exchange = true;for (int i = 1; i < bubble.length && exchange; i++) {exchange = false;for (int j = 0; j < bubble.length - i; j++) {if (bubble[j] > bubble[j + 1]) {int temp = bubble[j];bubble[j] = bubble[j + 1];bubble[j + 1] = temp;exchange = true;}}}}}//快速排序算法进程实现class QuickSortThread extends Thread implements Runnable {private int key;public QuickSortThread(int k) {key = k;}private void quickSort(int[] table, int low, int hight) {if (low < hight) {int i = low;int j = hight;int vot = table[i];while (i != j) {while (i < j && vot <= table[j]) {j--;}if (i < j) {table[i] = table[j];i++;}while (i < j && table[i] < vot) {i++;}if (i < j) {table[j] = table[i];j--;}}table[i] = vot;quickSort(table, low, j - 1);quickSort(table, i + 1, hight);}}public void run() {int[] table = new int[20000];System.arraycopy(Array, 0, table, 0, 20000);quickSort(table, 0, table.length - 1);}}//选择排序class SelectSortThread extends Thread implements Runnable {private int key;public SelectSortThread(int k) {key = k;}public void run() {int[] table = new int[20000];System.arraycopy(Array, 0, table, 0, 20000);for (int i = 0; i < table.length - 1; i++) {int min = i;for (int j = i + 1; j < table.length; j++) {if (table[j] < table[min])min = j;if (min != i) {int temp = table[i];table[i] = table[min];table[min] = temp;}}}}}//插入排序class InsertSortThread extends Thread implements Runnable {private int key;public InsertSortThread(int k) {key = k;}public void run() {int[] table = new int[20000];System.arraycopy(Array, 0, table, 0, 20000);for (int i = 1; i < table.length; i++) {int temp = table[i];int j;for (j = i - 1; j > -1 && temp < table[j]; j--) {table[j + 1] = table[j];}table[j + 1] = temp;}}}//小堆排序class HeapSortThread extends Thread implements Runnable{private int key;public HeapSortThread(int k) {key = k;}private void sift(int[] table, int low, int hight) {int i = low;int j = 2 * i + 1;int temp = table[i];while (j <= hight) {if (j < hight && table[j] > table[j + 1])j++;if (temp > table[j]) {table[i] = table[j];i = j;j = 2 * i + 1;} elsej = hight + 1;}table[i] = temp;}public void run() {int[] table = new int[20000];System.arraycopy(Array, 0, table, 0, 20000);int n = table.length;for (int j = n / 2 - 1; j >= 0; j--) {sift(table, j, n - 1);}for (int j = n - 1; j > 0; j--) {int temp = table[0];table[0] = table[j];table[j] = temp;sift(table, 0, j - 1);}}}//归并排序class MergSortThread extends Thread implements Runnable {private int key;public MergSortThread(int k) {key = k;}private void merg(int[] x, int[] y, int m, int r, int n) {int i = m, j = r, k = m;while (i < r && j < r + n && j < x.length) {if (x[i] < x[j]) {y[k++] = x[i++];}else {y[k++] = x[j++];}while (i < r) {y[k++] = x[i++];}while (j < r + n && j < x.length) {y[k++] = x[j++];}}}private void mergepass(int[] x, int[] y, int n) {int i = 0;while (i < x.length - 2 * n + 1) {merg(x, y, i, i + n, n);i += 2 * n;}if (i + n < x.length) {merg(x, y, i, i + n, n);} else {for (int j = i; j < x.length; j++) {y[j] = x[j];}}}public void run() {int[] table = new int[20000];System.arraycopy(Array, 0, table, 0, 20000);int n = 1;int[] y = new int[table.length];do {mergepass(table, y, n);n *= 2;if (n < table.length) {mergepass(y, table, n);n *= 2;}} while (n < table.length);}}
}public class App {public static void main(String[] args) throws Exception {AppFrame appframe=new AppFrame();appframe.setVisible(true);appframe.ThreadStart();//同时启动线程运行}
}
  • 这指示一个基本框架思路,涉及到一些知识,旨在学习。

java-多线程知识相关推荐

  1. Java多线程知识小抄集(四)——完结

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  2. Java多线程知识小抄集(三)

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  3. Java多线程知识小抄集(二)

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  4. Java多线程知识小抄集(一)

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  5. 多线程java_初学Java要注意什么 怎么掌握Java多线程知识

    初学Java要注意什么?怎么掌握Java多线程知识?很多初学Java的同学通常会对进程和线程傻傻分不清,进程和线程都是由操作系统所体会的程序运行的基本单元,一个程序至少有一个进程,一个进程至少有一个线 ...

  6. 思维导图系列之Java多线程知识梳理

    上一系列:思维导图系列之MySQL知识梳理 从多线程的基础.线程同步.线程间通信.线程调度.线程池.并发容器.线程安全的集合.原子变量等方面去罗列主要知识点,以思维导图的方式进行呈现,可以让读者更条理 ...

  7. java多线程知识_学习知库丨Java多线程知识大全

    进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程. 线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换 ...

  8. Java多线程知识整理

    多线程 1. 多线程基础 多线程状态转换图 普通方法介绍 yeild yeild,线程让步.是当前线程执行完后所有线程又统一回到同一起跑线.让自己或者其他线程运行,并不是单纯的让给其他线程. join ...

  9. 面试求职中需要了解的Java多线程知识

    Java中多线程的实现方式 在java的历史版本中,有两种创建多线程程序的方法 1) 通过创建Thread类的子类来实现(Thread类提供了主线程调用其它线程并行运行的机制) 主要步骤: 自定义类继 ...

  10. java多线程知识汇总(三)如何选择锁?如何加锁

    1.锁,保证的是被锁的代码,一次执行完毕才能被其他线程执行,锁保证了一个线程执行过程中不被其他线程打断.以保证数据的准确性. 2.数据的读写过程,是有冲突的,当一个线程正在读数据,另一个线程正在写同一 ...

最新文章

  1. python字典、列表、元祖使用场景_python学习第七讲,python中的数据类型,列表,元祖,字典,之元祖使用与介绍...
  2. ngnix mysql 缓存清除_利用Proxy Cache使Nginx对静态资源进行缓存
  3. javascript 实现快排 ,三向切分快排
  4. 论文翻译 基于R-FCN的物体检测
  5. JQuery调用iframe子页面函数/对象的方法
  6. 如何下载B站视频到本地?
  7. 由浅入深,解决三道【只出现一次的数】!
  8. 二分查找 递归与非递归实现
  9. Java正则表达式判断一个字符串是否是ipv4地址
  10. 增强for循环 泛型
  11. eclipse无法弹出控制台
  12. tftp协议服务器IP地址,TFTP服务器的搭建
  13. android qq输入法表情,QQ输入法(Android)4.8 表情进行时
  14. 总结jquery-seat-charts插件使用方法
  15. 智慧数字经营有什么作用
  16. 一套WPF+EF+SQLServer 会员卡管理系统源码
  17. 【嵌入式百科】003——时钟周期、指令周期、机器周期、总线周期
  18. 六大设计原则之接口隔离原则
  19. Access学习要点2----Access2010中如何运行SQL执行SQL语句
  20. ubuntu桌面便签_4个最佳的Linux便签应用程序:Stickynotes,Xpad,KNotes,Pin ‘Em Up

热门文章

  1. LeetCode 第 31 场双周赛(273/2767,前9.87%,第3次全部通过)
  2. 程序员面试金典 - 面试题 05.08. 绘制直线(位运算)
  3. LeetCode 29. 两数相除(位运算)
  4. LeetCode 876. 链表的中间结点(快慢指针)
  5. 4.聚合aggregate
  6. 百度飞桨弯道超车了吗?!
  7. Github Star过万的阿里学长独家干货分享
  8. 文本分类有哪些论文中很少提及却对性能有重要影响的tricks?
  9. Java多线程系列(一):最全面的Java多线程学习概述
  10. 论文浅尝 - ACL2020 | 一种用于关系三元组提取的级联二进制标记框架