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

做小程序的时候,发现数组真的很有用,对于顺序排序随机排序都能用到。
尤其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);
}
}
}
}
}


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


[img]http://dl2.iteye.com/upload/attachment/0099/3565/8abfb55c-2888-3755-80a7-dabfc88fc672.jpg[/img]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值