自己玩玩写写,排序的过程多么有趣,特别是把看着电脑吧一堆乱七八糟的数据排成有序组合的时候,看起来贼舒服,特别是强迫症患者。好了,话不多说上代码,也算是自己记录一下吧,没有什么技术含量但个人感觉比较有趣。

排序以及显示代码:

  1. package com.wyb.dyi.test;
  2.  
  3. import java.awt.Toolkit;
  4. import java.util.Random;
  5.  
  6. import com.wyb.dyi.test.*;
  7.  
  8. public class showBubbleSort {
  9. public static int W = (int) Toolkit.getDefaultToolkit().getScreenSize()
  10. .getWidth();/* 当前屏幕宽度 */
  11. public static int H = (int) Toolkit.getDefaultToolkit().getScreenSize()
  12. .getHeight();/* 当前屏幕高度 */
  13.  
  14. static int[] array = getArray(W);
  15. /*显示用的面板*/
  16. static ShowArrayInLine show = new ShowArrayInLine(array);
  17.  
  18. /* main */
  19. public static void main(String[] args) {
  20. try {
  21. Thread.sleep(2000);
  22. } catch (Exception e) {
  23. }
  24. System.out.println("start!");
  25. bubble(array);
  26.  
  27. }
  28.  
  29. /* 冒泡排序 */
  30. static void bubble(int[] array) {
  31. for (int i = 0; i < array.length; i++) {
  32. for (int j = 0; j < array.length - 1 - i; j++) {
  33. if (array[j] > array[j + 1]) {
  34. int temp = array[j];
  35. array[j] = array[j + 1];
  36. array[j + 1] = temp;
  37. }
  38. /*可以在这里刷新显示,但是刷新速度过慢,能观察到排序细节*/
  39. show.updateShowArray(array);
  40. }
  41. /*在这里刷新显示比较快*/
  42. //show.updateShowArray(array);
  43. }
  44. }
  45.  
  46. /* 构造一个长度为length的高度为length/2的数组 */
  47. public static int[] getArray(int length) {
  48. /* 生成空数组 */
  49. int[] re = new int[length];
  50. /* 给数组附上高为length/2的升序数值 */
  51. for (int i = 0; i < re.length; i++)
  52. re[i] = i / 2;
  53. /* 讲有序数组打乱 */
  54. for (int i = 0; i < 20 * re.length; i++) {
  55. int index1 = new Random().nextInt(length);
  56. int index2 = new Random().nextInt(length);
  57. int temp = re[index1];
  58. re[index1] = re[index2];
  59. re[index2] = temp;
  60. }
  61.  
  62. return re;
  63. }
  64. }

排序块

  1. package com.wyb.dyi.test;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Graphics;
  5. import java.awt.Toolkit;
  6. import java.util.Random;
  7.  
  8. import javax.swing.JFrame;
  9. import javax.swing.JPanel;
  10.  
  11. /* 显示主框架JFrame类 */
  12. class ShowArrayInLine extends JFrame {
  13. private static final long serialVersionUID = 1L;
  14. ShowJPanel show;
  15. int[] oldArray;
  16. /* 构造函数,初始化显示框架 */
  17. public ShowArrayInLine(int[] a) {
  18. oldArray=a;
  19. show = new ShowJPanel(a,a);
  20. show.setBounds(0, 0, ShowTool.W, ShowTool.H);
  21. this.setSize(ShowTool.W, ShowTool.H);
  22. this.setTitle("归并排序");
  23. this.setLocation(0, 0);
  24. this.add(show);
  25. this.setVisible(true);
  26. this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  27. }
  28.  
  29. /**
  30. * 更新画布
  31. *
  32. * @param a
  33. */
  34. public void updateShowArray(int[] a) {
  35.  
  36. this.remove(show);
  37. show = new ShowJPanel(a,oldArray);
  38. this.add(show);
  39. this.setVisible(true);
  40. oldArray=a;
  41. }
  42. }
  43.  
  44. /* 画图面板 */
  45. class ShowJPanel extends JPanel {
  46. private static final long serialVersionUID = 1L;
  47. int[] array;/* 用于接收构造方法传过来的数组,用于绘图 */
  48. public int[] oldArray;
  49.  
  50. public ShowJPanel(int[] a,int[] b) {
  51. array = a;
  52. oldArray=b;
  53. }
  54. /* 绘图函数 */
  55. public void paintComponent(final Graphics g) {
  56. Random r=new Random();
  57.  
  58. /*画笔置白色*/
  59. g.setColor(Color.WHITE);
  60. /* 擦除上一次绘制的团*/
  61. g.fillRect(0,0,Tool.W,Tool.H);
  62.  
  63. /* 开始绘制当前数组图像,以(0,ShowTool.H)为原点,向右为x轴表数组下标,向上为y轴表当前下标所对应数组存置大小*/
  64. for (int i = 0; i < array.length; i++) {
  65. /* 画笔置黑色*/
  66. if(oldArray[i]==array[i])
  67. g.setColor(Color.BLACK);
  68. else
  69. g.setColor(Color.RED);
  70. g.drawLine(i, ShowTool.H - 80, i, ShowTool.H - array[i] - 80);
  71. }
  72.  
  73. }
  74. }
  75.  
  76. /* 工具类,获取当前屏幕大小,用户初始化显示组件和new乱序数组 */
  77. class ShowTool {
  78. public static int W = (int) Toolkit.getDefaultToolkit().getScreenSize()
  79. .getWidth();/* 当前屏幕宽度 */
  80. public static int H = (int) Toolkit.getDefaultToolkit().getScreenSize()
  81. .getHeight();/* 当前屏幕高度 */
  82. }

显示面板块

下面给出效果图以及连接: 冒泡排序过程呈现之java内置GUI表示视频

【子非鱼】冒泡排序过程呈现之java内置GUI表示的更多相关文章

  1. 【开发者笔记】冒泡排序过程呈现之java内置GUI表示

    自己玩玩写写,排序的过程多么有趣,特别是把看着电脑吧一堆乱七八糟的数据排成有序组合的时候,看起来贼舒服,特别是强迫症患者.好了,话不多说上代码,也算是自己记录一下吧,没有什么技术含量但个人感觉比较有趣 ...

  2. 【子非鱼】插入排序过程呈现之java内置GUI表示

    先给代码,再给过程视频: package com.dyi.wyb.sort; import java.awt.Color; import java.awt.Graphics; import java. ...

  3. 【子非鱼】归并排序过程呈现之java内置GUI表示

    在网上看到一个视频将各种排序用视频表示出来,配上音乐,挺好玩的样子,就算是不会编程的人看到也会觉得很舒服,碰巧我也正在写归并算法,于是就用java的GUI实现一个. 归并排序的时间复杂度是T(n)=O ...

  4. 【开发者笔记】插入排序过程呈现之java内置GUI表示

    先给代码,再给过程视频: package com.dyi.wyb.sort; import java.awt.Color; import java.awt.Graphics; import java. ...

  5. 【开发者笔记】归并排序过程呈现之java内置GUI表示

    在网上看到一个视频将各种排序用视频表示出来,配上音乐,挺好玩的样子,就算是不会编程的人看到也会觉得很舒服,碰巧我也正在写归并算法,于是就用java的GUI实现一个. 归并排序的时间复杂度是T(n)=O ...

  6. Java 性能分析工具 , 第 2 部分:Java 内置监控工具

    引言 本文为 Java 性能分析工具系列文章第二篇,第一篇:操作系统工具.在本文中将介绍如何使用 Java 内置监控工具更加深入的了解 Java 应用程序和 JVM 本身.在 JDK 中有许多内置的工 ...

  7. 深入理解Java内置锁和显式锁

    synchronized and Reentrantlock 多线程编程中,当代码需要同步时我们会用到锁.Java为我们提供了内置锁(synchronized)和显式锁(ReentrantLock)两 ...

  8. 使用Java内置的Http Server构建Web应用

    一.概述 使用Java技术构建Web应用时, 我们通常离不开tomcat和jetty之类的servlet容器,这些Web服务器功能强大,性能强劲,深受欢迎,是运行大型Web应用的必备神器. 虽然Jav ...

  9. java内置线程池ThreadPoolExecutor源码学习记录

    背景 公司业务性能优化,使用java自带的Executors.newFixedThreadPool()方法生成线程池.但是其内部定义的LinkedBlockingQueue容量是Integer.MAX ...

随机推荐

  1. 不是技术牛人,如何拿到国内IT巨头的Offer (转载)

    原文地址:http://blog.csdn.net/lsldd/article/details/13506263 不久前,byvoid面阿里星计划的面试结果截图泄漏,引起无数IT屌丝的羡慕敬仰.看看这 ...

  2. arcpy.mapping常用四大件-Layer

    arcpy.mapping常用四大件-Layer by 李远祥 图层是地图里面非常重要的组成,几乎所有的制图显示都与图层有关.首先它是连接数据与符号渲染的重要桥梁,其次在出版地图中,图层又与图例关联在 ...

  3. WinForm——记住密码

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Runti ...

  4. Swift2.0 函数学习笔记

    最近又有点忙,忙着找工作,忙着适应这个新环境.现在好了,上班两周周了,也适应过来了,又有时间安安静静的就行我们前面的学习了.今天这篇笔记,记录的就是函数的使用.下面这些代码基本上是理清楚了函数的额使用 ...

  5. 关于post与get请求参数存在特殊字符问题

    遇到项目中存在文本编辑框输入特殊字符 比如:# ? & 空格 , 导致后台接受不到参数问题,对可能存在特殊字符的参数进行encodeURIComponent; C#后台接受参数不需要解码 也可 ...

  6. tomcat的配置

    配置tomcat需要 先下载JDK JDE配置环境http://jingyan.baidu.com/article/870c6fc33e62bcb03fe4be90.htmlXML配置 路径——> ...

  7. 关于AR,你想要的全在这儿了

    定义 增强现实(Augmented Reality,简称AR),是一种实时地计算摄影机影像的位置及角度并加上相应图像的技术,这种技术的目标是在屏幕上把虚拟世界套在现实世界并进行互动.这种技术估计由19 ...

  8. matlab分割背景与物体

    [name,path]=uigetfile('*.jpg;*.png;*.bmp','选择一张图片');f=imread([path name]);count = 0; T = mean2(f); d ...

  9. 一步一步学Python(2) 连接多台主机执行脚本

    最近在客户现场,每日都需要巡检大量主机系统的备库信息.如果一台台执行,时间浪费的就太冤枉了. 参考同事之前写的一个python脚本,配合各主机上写好的shell检查脚本,实现一次操作得到所有巡检结果. ...

  10. C语言中的函数、数组与指针

    1.函数:当程序很小的时候,我们可以使用一个main函数就能搞定,但当程序变大的时候,就超出了人的大脑承受范围,逻辑不清了,这时候就需要把一个大程序分成许多小的模块来组织,于是就出现了函数概念:  函 ...