`
fuziyi0405
  • 浏览: 4348 次
社区版块
存档分类
最新评论

数组和在选择排序中的应用

阅读更多
做小程序的时候,发现数组真的很有用,对于顺序排序随机排序都能用到。
尤其2048的时候,需要用到存图片的位置,尤其能体现出来。
不过我们今天是在选择排序中看,也有所有的定义和去长度部分了,这些主要的函数实现在注解里面写的比较详细,那我们得先回顾一下基本概念:
一维数组
______________________________________________________________________
数组的概念:
1.数组名中存储的是什么内容?
  数组名储存的是内存的首地址
  数组的每一个元素
2. 实例化一个数组后,数组在内存中以连续的空间进行存储
   数组是属于线性的数据结构
3.数组可以是任意类型的(这点个人觉得是很好用的一点,可以用数组存图片等等)

数组的定义:
1. 数据类型 =new 数据类型[长度]
(new关键字 :定义一个对象 开辟内存)
  eg:  int[] abc=new int[10];
   另一种定义数组的方式
   int abc[]={值...}
获取数组长度:
   数组对象唯一的属性:length
   int a=abc.length
  
数组的操作:
1.获取数组第一个元素
  value1=数组名[下标];
  数组名[下标]=值;

2.(没有赋值时候,int型默认是0 float:0.0 boolean  string :null...可以自己试一试)
   给数组赋值
   要给数组赋字母的值:;
   for(i=0;i<26;i++){
       array[i]=((char)97+i)+"";
    }



二维数组
________________________________________________________________________
二维数组在概念和操作上很多都相似,下面列出不一样的地方
定义:
int [][] abc=new int[10][10];

获取数组的元素总数:
获取第一个中括号的长度:数组名.length;
获取第一个中括号的长度:数组名[行下标].length ;

数组的操作:
获取元素值
eg:   int value1=array[0][3];

数组的基本介绍先到这里,下面是应用了数组我们做的选择排序


import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.util.Random;

import javax.swing.JButton;

public class myTask extends javax.swing.JFrame {
	// 定义基本属性
	public java.awt.Graphics g;
	//主程序入口  
	public static void main(String args[]) {
		myTask mt = new myTask();
		mt.showUI();
	}
	// 初始化界面方法
	private void showUI() {
		this.setDefaultCloseOperation(3);
		this.setSize(600, 700);
		this.setResizable(false);
		this.setLocationRelativeTo(null);
		this.setLayout(new java.awt.FlowLayout());
		/*
		 * 加按钮判断不一样的排序
		 */
		javax.swing.JButton jbu1 = new JButton("选择排序");
		javax.swing.JButton jbu2 = new JButton("其他排序");
		jbu1.setBorder(null);
		jbu2.setBorder(null);
		jbu1.setBackground(new Color(100,200,55));
		jbu2.setBackground(new Color(100,200,55));
		
		// 按钮添加监听器
		this.add(jbu1);
		this.add(jbu2);
		// 设置窗体可见
		this.setVisible(true);
		// 注意要窗体可见后再取得画板
		g = this.getGraphics();
		taskListener tkl = new taskListener(this, g);
		jbu1.addActionListener(tkl);
		jbu2.addActionListener(tkl);
		// 调用paint方法
		paint(g);
	}
	// 定义paint方法
	public void paint(Graphics g) {
		super.paint(g);

	}
}


继承监听器的类

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.util.Random;

public class taskListener implements java.awt.event.ActionListener {
	// 构造方法
	private String commandname;
	private Graphics g;
	public String getCpmmandname() {
		return commandname;
	}
	private myTask mt;

	public taskListener(myTask mt, Graphics g) {
		this.mt = mt;
		this.g = g;
	}

	// 响应命令
	public void actionPerformed(ActionEvent e) {
		g.clearRect(0, 0, 800, 800);
		g.setFont(new Font("微软雅黑", Font.PLAIN, 20));
		g.setColor(Color.gray);
		if (e.getActionCommand().equals("选择排序")) {
			// 随机数给一个长度为9的数组附上数值
			java.util.Random random = new Random();
			int[] array = new int[9];
			for (int i = 0; i < 9; i++) {

				array[i] = random.nextInt(50);
			}
			g.drawString("原始数据 ", 30, 100);

			//先画一个原始数据
			for (int i = 0; i < 9; i++) {
				g.setColor(Color.white);
				g.fillOval(115 + i * 40, 75, 35, 35);
				g.setColor(Color.gray);
				g.drawString(array[i] + "", 120 + i * 40, 100);

			}
			// 循环主程序
			// 外部循环,从左到右依次取得最小值
			for (int i = 0; i < array.length - 1; i++) {
				// i从0开始,让min最小值时先为0
				int min = i;
				// 如果t从i的右边开始循环,遇到更小t值,给min赋t的值,直到取得第一个最小值
				for (int t = i + 1; t < array.length; t++) {

					if (array[t] < array[min]) {
						min = t;
					}
				}
				// 给第i个数组元素赋当前最小值
				int temp = array[i];
				array[i] = array[min];
				array[min] = temp;
				// 画出每次交换最小值输出的结果,j是每次输出的一行新数组,以i代表每次最小值交换
				for (int j = 0; j < array.length; j++) {
					g.setColor(Color.gray);				
					g.fillOval(120 + j * 40, 125 + i * 50, 35, 35);
					g.setColor(Color.white);
					g.drawString(" " + array[j], 120 + j * 40, 150 + i * 50);
				}
			}
		}
	}
}


运行出来的结果是这样子的











  • 大小: 75.7 KB
1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics