数组是什么?


### 一、[一维数组](http://baike.baidu.com/item/%E4%B8%80%E7%BB%B4%E6%95%B0%E7%BB%84?sefr=cr)

1 声明与定义的区别

一般的情况下我们常常这样叙述,
把建立空间的声明称之为"定义",
而把不需要建立存储空间称之为"声明". 很明显我们在这里指的声明是范围比较窄的,
也就是说非定义性质的声明。
	// 1、声明
int a[];
int[] b; // 2、定义
a = new int[5];
b = new int[5]; // 3、赋值
a[0] = 1;
a[1] = 2;
a[2] = 3;
a[3] = 4;
a[4] = 5; // 4、定义
int[] a = new int[10];
int a[] = new int[10]; // 5、定义并初始化
int[] a = {1,2,3,4};
int[] a = new int[]{1,2,3,4};

1.2 运用

  1. 数组名表示什么?
  2. arr[0]表示什么?
  3. 怎么获取数组长度?
  4. 如何使用数组下标取值?
  5. 如何输出数组中所有的元素?
  6. 如何给数组中所有元素求和?
  7. 如何找出数组中最大值,最小值?
  8. 如何判断数组中是否包含某一个值?
  9. 如何去除数组中的重复元素?
  10. 如何求两个数组元素的交集与并集?
  11. 如何判断两个数组是包含的元素值都相同?

练习:

一个班有10个同学的数学成绩需要记录,
要计算班级
总成绩,
平均成绩,
最高分,
最低分,
及格人数等数据。

二、二维数组

2.1 二维数组其实就是矩阵

2.2 声明、定义与初始化

	// 声明
int a[][];
int[][] b; // 第一次给一个声明的变量赋值叫做初始化
a = new int[][]{{1,1,1},{2,2,2}}; // 定义
int c[][] = {{1,1,1},{2,2,2}}; int[][] d = {{1,1,1},{2,2,2}};

2.3 运用

练习1

//	某校幼儿园有3个班,每个班有5个人,计算各班平均年龄?计算全园平均年龄?计算总人数?

	int students[][] = { { 3, 6, 4, 5, 4 }, { 2, 3, 5, 3, 2 }, { 3, 4, 6, 2, 4 } };
int[][] students = { { 3, 6, 4, 5, 4 }, { 2, 3, 5, 3, 2 }, { 3, 4, 6, 2, 4 } };

练习2

1. 打印出杨辉三角?

### 三、数组排序

3.1、选择排序


int[] array1 = { 2, 3, 1, 5, 4 };
// 控制遍历的次数
for (int i = 0; i < array1.length - 1; i++) {
// int min = array1[i]; // 默认最小值
int minIndex = i; // 记录最小值的下标
// 找出最小值
for (int j = i + 1; j < array1.length; j++) {
if (array1[j] < array1[minIndex]) {
minIndex = j;
}
}
// 如果最小值不在最前面,和最前面做交换
if (minIndex != i) {
int temp = array1[i];
array1[i] = array1[minIndex];
array1[minIndex] = temp;
}
}
// 输出
System.out.println("选择排序之后:");
for (int i = 0; i < array1.length; i++) {
System.out.println("array1[" + i + "] = " + array1[i]);
}

3.2、冒泡排序


int array3[] = { 1, 3, 4, 6, 2, 11, 19, 2, 7, 0 };
// 控制遍历次数
for (int i = 0; i < array3.length - 1; i++) {
// 控制比较交换
for (int j = 0; j < array3.length - i - 1; j++) {
// 控制交换条件
if (array3[j] > array3[j + 1]) {
int temp = array3[j];
array3[j] = array3[j + 1];
array3[j + 1] = temp;
}
System.out.print("array3 第" + (i + 1) + "次冒泡,第" + (j + 1) + "比较结束:");
for (int i1 = 0; i1 < array3.length; i1++) {
System.out.print("," + array3[i1]);
}
System.out.println("");
}
System.out.print("array3 第" + (i + 1) + "次冒泡结束:");
for (int i1 = 0; i1 < array3.length; i1++) {
System.out.print("," + array3[i1]);
}
System.out.println("");
}
System.out.println("array3 冒泡排序之后:");
for (int i = 0; i < array3.length; i++) {
System.out.println("array3[" + i + "] = " + array3[i]);
}

3.3、直接插入排序


int array6[] = { 3, 4, 2, 1, 5, 6, 9, 8, 7, 0 };
/**
* 2 2,3,4
*/
for (int i = 1; i < array6.length; i++) {
int j = i; // 2, i = 2 ; j = 2
int temp = array6[i];
while (j > 0 && temp < array6[j - 1]) {
array6[j] = array6[j - 1]; // array6[2] = array6[1];
j--;
}
System.out.println("第" + i + "次移动后:");
for (int i1 = 0; i1 < array6.length; i1++) {
System.out.print("," + array6[i1]);
}
System.out.println();
array6[j] = temp;
}
System.out.println("array6 直接插入排序之后:");
for (int i = 0; i < array6.length; i++) {
System.out.println("array6[" + i + "] = " + array6[i]);
}

3.4、阶乘


/**
* 1! = 1
* 2! = 2 x 1 = 2 x 1!
* 3! = 3 x 2 x 1 = 3 x 2!
* 4! = 4 x 3 x 2 x 1 = 4 x 3!
* ......
*/ static int Factorial(int n) {
// return n*(n-1)!
if (n < 1) {
return 0;
}
if (n == 1) {
return 1;
} else {
return n * Factorial(n - 1);
}
}

3.5、归并排序


static void MSort(int[] arr, int left, int right) {
int mid = (left + right) / 2;
if (left < right) {
// 递归拆分左边
MSort(arr, left, mid);
// 递归拆分右边
MSort(arr, mid + 1, right);
// 将拆分的有序数组排序
Merge(arr, left, mid, right);
}
} static void Merge(int[] arr, int left, int mid, int right) {
int[] temp = new int[right - left + 1];
int low1 = left; // 左边数组的起始位置
int low2 = mid + 1; // 右边数组的起始位置
int index = 0;
// 比较拆分的两个子数组,依次取最小值,放入新数组
while (low1 <= mid && low2 <= right) {
if (arr[low1] <= arr[low2]) {
temp[index++] = arr[low1++];
} else {
temp[index++] = arr[low2++];
}
}
// 把左边剩余的装进新数组
while (low1 <= mid) {
temp[index++] = arr[low1++];
}
// 把右边剩余的装进新数组
while (low2 <= right) {
temp[index++] = arr[low2++];
}
//把新数组里面的有序元素数,装进原数组
for (int i = 0; i < temp.length; i++) {
arr[i + left] = temp[i];
}
}

java5 - 数组与排序算法的更多相关文章

  1. Java数组的排序算法

    在Java中,实现数组的排序算法有很多,如冒泡排序法.选择排序法.直接插入法和快速排序法等.下面介绍几种排序算法的具体 实现. 本文引用文献:Java必须知道的300个问题. 1.冒泡排序法 1.1 ...

  2. Shell数组以及排序算法(冒泡、直接选择、反转)

    Shell数组以及排序算法(冒泡.直接选择.反转) 目录 Shell数组以及排序算法(冒泡.直接选择.反转) 一.数组概述 1. 数组的定义 2. 下标的定义 3. 数组的特点 4. 数组定义的方法 ...

  3. 02-Java 数组和排序算法

    一.Java 数组 1.数组定义:数组是有序数据的集合,数组中的每个元素具有相同的数组名和下标来做唯一标识. 2.数组的分类:一维.二维.三维. 3.数组声明及内存分配: 为数组分配内存空间:如果不分 ...

  4. PHP数组基本排序算法和查找算法

    关于PHP中的基础算法,小结一下,也算是本博客的第一篇文章1.2种排序算法冒泡排序:例子:个人见解 5 6 2 3 7 9 第一趟 5 6 2 3 7 9 5 2 6 3 7 9 5 2 3 6 7 ...

  5. java基础---数组的排序算法(3)

    一.排序的基本概念 排序:将一个数据元素集合或序列重新排列成按一个数据元素某个数据项值有序的序列 稳定排序:排序前和排序后相同元素的位置关系与初始序列位置一致(针对重复元素来说,相对位置不变) 不稳定 ...

  6. java se系列(四) 函数、数组、排序算法、二分法、二维数组

    1 函数 1.1  数的概述 发现不断进行加法运算,为了提高代码的复用性,就把该功能独立封装成一段独立的小程序,当下次需要执行加法运算的时候,就可以直接调用这个段小程序即可,那么这种封装形形式的具体表 ...

  7. hiho一下 第四十八周 拓扑排序·二【拓扑排序的应用 + 静态数组 + 拓扑排序算法的时间优化】

    题目1 : 拓扑排序·二 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho所在学校的校园网被黑客入侵并投放了病毒.这事在校内BBS上立刻引起了大家的讨论,当 ...

  8. C# 实现二维数组的排序算法(代码)

    class Order { /// <summary> /// 对二维数组排序 /// </summary> /// <param name="values&q ...

  9. 排序图解:js排序算法实现

    之前写过js实现数组去重, 今天继续研究数组: 排序算法实现. 排序是数据结构主要内容,并不限于语言主要在于思想:大学曾经用C语言研究过一段时间的排序实现, 这段时间有空用JS再将排序知识点熟悉一遍. ...

随机推荐

  1. 一个故事讲明白线程的私家领地:ThreadLocal

    张大胖上午遇到了一个棘手的问题,他在一个AccountService中写了一段类似这样的代码: Context ctx = new Context(); ctx.setTrackerID(.....) ...

  2. 网络编程之TCP编程

    网络编程之TCP编程 前面已经介绍过关于TCP协议的东西,这里不做赘述.Java对于基于TCP协议的网络通信提供了良好的封装,Java使用socket对象来代表两端的通信窗口,并通过Socket产生I ...

  3. 微信支付JSAPI公众号支付授权目录

    详情 http://yangjunwei.com/a/1815.html

  4. android在一个应用程序员启动另一个程序

    一般我们知道了另一个应用的包名和MainActivity的名字之后便可以直接通过如下代码来启动: Intent intent = new Intent(Intent.ACTION_MAIN); int ...

  5. Java自学能学会吗?最新Java高级学习路线

    就好像一千个人心中有一千个哈利波特一样,这个答案不绝对也不唯一,Java好学但自学的确阻力有些大,作为一门技术语言,它所蕴含的智慧绝对不是靠几本XX入门,XX框架之类的书所能概括,自学Java你要做好 ...

  6. Bug等级判断标准

    测试的问题大致可分为以下几个类型:致命问题严重问题一般问题轻微问题 判断标准如下1.致命问题:造成系统崩溃.死机.死循环,导致数据库数据丢失,与数据库连接错误,主要功能丧失,基本模块缺失等问题.如:代 ...

  7. BSGS(Baby Steps,Giant Steps)算法详解

    BSGS(Baby Steps,Giant Steps)算法详解 简介: 此算法用于求解 Ax≡B(mod C): 由费马小定理可知: x可以在O(C)的时间内求解:  在x=c之后又会循环: 而BS ...

  8. 浅谈WPF依赖项属性

    浅谈WPF依赖项属性 0. 引言 依赖项属性虽然在使用上和CLR属性一样,但是它是WPF特有的,不同于CLR属性.只是封装为我们常用CLR的属性,在语法使用上和CLR属性一样.WPF中一些功能:动画, ...

  9. 基于 React + Webpack 的音乐相册项目(下)

    上一篇我们完成了音乐相册里面的播放图片的功能,这一篇主要完成的是音乐相册里面的音乐播放器功能.最终让我们基于 React 的音乐相册图文并茂.有声有色. 我们主要从以下几个部分来展开: 数据准备 进度 ...

  10. ABP官方文档翻译 7.3 Quartz集成

    Quartz集成 介绍 安装 创建Jobs 计划安排Jobs 更多 介绍 Quartz是一个全功能的.开源的job计划安排系统,可以用在小的apps也可以用于大型的企业系统.Abp.Quartz包简化 ...