第十课 数组
来源:互联网 发布:汉子笔顺数据库 编辑:程序博客网 时间:2024/05/16 09:14
1.数组:多个相同类型数据的组合
引用类型:类 数组 和 接口
1)声明 int[] var 或者 int var[] 建议大家使用第一种
2)初始化 数组下标从0开始
(1) int[] arr1={1,2,3,4};
(2) int[] arr2=new int[5];
arr2[0]=1;
arr2[1]=2;
arr2[2]=3
(3)
//对象数组
Person[] arrPerson=new Person[3];
arrPerson[0]=new Person("ddd");
arrPerson[1]=new Person("ddd");
arrPerson[2]=new Person("ddd");
数组是引用类型 数组里的每一个元素相当于成员变量 所以数组初始化的时候
和成员变量初始化是一样的(例如 int 默认0 引用类型 默认
null boolean 默认 false)
3)数组 length属性 取数组长度
循环遍历数组的每一个元素
int[] after={1,30,8,2,200,5,100,7,6};
for(int i=0;i<after.length;i++){
System.out.println(after[i]);
}
4)数组的排序
1)冒泡排序:/每次比较相邻的两个数 让最大的那个数排到第二个循环的末尾
public int[] bubbleSort(int before[])
{
int t;
for (int i=0;i<before.length;i++)
{
for(int j=0;j<before.length-i-1;j++)
{
if (before[j]>before[j+1])
{
t=before[j];
before[j]=before[j+1];
before[j+1]=t;
}
}
}
return before;
}
2)jdk api 提供的排序方法
Arrays.sort(数组)
5)二位数组
初始化:
1)静态初始化
int [][] arr3 = {{1,2},{3,4},{5,6}};//正确
int [3][2] arr3 = {{1,2},{3,4},{5,6}};//非法的
2)动态初始化
int[][] arr4=new int[3][];//正确
int[][] arr5=new int[3][5];//正确
int[][] arr6=new int[][5];//非法的
3)循环遍历二位数组
for(int i=0;i<arr3.length;i++){
for(int j=0;j<arr3[i].length;j++){
System.out.println("arr3["+i+"]["+j+"]="+arr3[i][j]);
}
}
2.其它排序方式
1)插入排序
//将数组分成两个小数组,每次从后面的数组中取出索引最小的数组元素,插入到前面
//的适当位置,使得插入到前面的数组后,它前面的数组元素都比它小,而后面都比它大
//{ 2, 1, 5, 876, 12, 56 }
public class InjectionSort {
// 插入排序方法
public static void injectionSort(int[] number) {
// 第一个元素作为一部分,对后面的部分进行循环
for (int j = 1; j < number.length; j++) {
int tmp = number[j];
int i = j - 1;
//当前位置j之前比number[j] 还小的数
while (tmp < number[i]) {
number[i + 1] = number[i];
i--;
if (i == -1)
break;
}
number[i + 1] = tmp;
}
}
public static void main(String[] args) {
int[] num = { 2, 1, 5, 876, 12, 56 };
injectionSort(num);
for (int i = 0; i < num.length; i++) {
System.out.println(num[i]);
}
}
}
2)选择排序
// 将要排序的数组分成两部分:一部分是从小到大排好序的,一部分是无序的,从无序的部分取出
//最小的数值 放到已排好序的部分的最后
//{7 8 9 6 5}
public class SelectionSort {
// 选择排序方法
public static void selectionSort(int[] number) {
for (int i = 0; i < number.length - 1; i++) {
int m = i;
//找到number[i]之后的最小的数
for (int j = i + 1; j < number.length; j++) {
if (number[j] < number[m])
//说明number[j]小于number[m] 这样把j给m说明了 想看看有没有比number[j]更小的数了
m = j;
}
//分i==m 说明 number[i]以后没有比number[i]更小的数了
if (i != m)
swap(number, i, m);
}
}
// 用于交换数组中的索引为i、j的元素
private static void swap(int[] number, int i, int j) {
int t;
t = number[i];
number[i] = number[j];
number[j] = t;
}
public static void main(String[] args) {
// 定义一个数组
int[] num = { 2, 1, 5, 876, 12, 56 };
// 排序
selectionSort(num);
for (int i = 0; i < num.length; i++) {
System.out.println(num[i]);
}
}
}
3)快速排序
//将一个大的数组的排序问题,分解成两个小的数组的排序.而每一个小的数组的排序又可以继续分解成更小的两个数组
//这样这个数组的排序方式可以一直的递归分解下去 直到数组的大小为2
public class QuickSort {
// 排序方法,接受一个int[]参数,将会调用快速排序方法进行排序
public static void sort(int[] number) {
quickSort(number, 0, number.length - 1);
}
// 快速排序方法
private static void quickSort(int[] number, int left, int right) {
if (left < right) {
int s = number[left];
int i = left;
int j = right + 1;
while (true) {
// 向右找大于s的数的索引
while (i + 1 < number.length && number[++i] < s)
;
// 向左找小于s的数的索引
while (j - 1 > -1 && number[--j] > s)
;
// 如果i>=j,退出循环
if (i >= j)
break;
// 否则交换索引i和j的元素
swap(number, i, j);
}
number[left] = number[j];
number[j] = s;
// 对左边进行递归
quickSort(number, left, j - 1);
// 对右边进行递归
quickSort(number, j + 1, right);
}
}
// 交换数组number中的索引为i、j的元素
private static void swap(int[] number, int i, int j) {
int t;
t = number[i];
number[i] = number[j];
number[j] = t;
}
public static void main(String[] args) {
int[] num = { 34, 1, 23, 345, 12, 546, 131, 54, 78, 6543, 321, 85,
1234, 7, 76, 234 };
sort(num);
for (int i = 0; i < num.length; i++) {
System.out.println(num[i]);
}
}
}
3.用数组模拟栈(stack)
public class MyStack {
private int capacity = 100;
private String[] items;
private int top = 0;
// 不带参数构造器
public MyStack() {
this(100);
}
// 带参数构造器,参数为堆栈大小
public MyStack(int cap) {
this.capacity = cap;
items = new String[cap];
}
// 压栈
public void push(String s) {
top++;
items[top] = s;
}
// 出栈
public void pop() {
items[top] = null;
top--;
}
// 获得堆栈元素个数
public int size() {
return top;
}
// 清空堆栈
public void empty() {
top = 0;
}
// 取出最顶端的堆栈元素
public String top() {
return items[top];
}
}
- 第十课 数组
- 第十课:PHP中遍历数组
- 第十课:PHP中遍历数组
- 第十章 动态数组
- 第十章 动态数组
- 第十四周 数组
- 第十四周 数组
- 第十章 动态数组
- 第十四周数组逆序
- 王朝 第十四周 数组
- 王朝 第十四周 数组
- 王朝 第十四周 数组
- 王朝 第十四周 数组
- 第十四周数组逆序
- 第十八天 数组
- C++逆向第十课-----数组与指针的寻址
- 第十八节 java学习 数组
- 第十四周字符数组排序
- How the CLR Creates Runtime Objects
- 关于MMC不能打开数据库问题解决方案
- SQL时间段查询
- 禹含网络中心介绍
- C/C++动态分配二维数组(在堆上分配二维数组内存)
- 第十课 数组
- zz C语言的5种存储类以及关键字volatile、restrict
- 用于运行 ASP.NET 的进程帐户必须具有对 IIS 元数据库
- linux下gdb单步调试(上)
- JS框架 本人在工作中总结出来的
- 第十一课 常用字符串函数
- Windows Via C/C++ 读书笔记 9 Windows Memory Architecture
- linux下gdb单步调试(中)
- linux下gdb单步调试(下)