1.1 两类排序
(1)内排序:指待排序列完全存放在内存中所进行的排序。内排序大致可分为五类:插入排序、交换排序、选择排序、归并排序和分配排序。
(2)外排序:指排序过程中还需访问外存储器的排序。为了以后讨论方便,我们直接将排序码写成一个一维数组的形式,并且在没有声明的情形下,所有排序都按排序码的值递增排列。
1.2 数组中涉及到的常见算法
1.数组元素的赋值(杨辉三角、回形数等)
2.求数值型数组中元素的最大值、最小值、平均数、总和等
3.数组的复制、反转、查找(线性查找、二分法查找)
4.数组元素的排序算法
1.1 杨辉三角
package com.pyy.contact; /* * 杨辉三角要满足的条件是 * yanghui[i][j] = yanghui[i-1][j] + yanghui[i-1][j-1]; */ public class YangHuiTest { public static void main(String[] args) { // 1.声明并初始化二维数组 int[][] yangHui = new int[10][]; // 2.给数组的元素赋值 for (int i = 0; i < yangHui.length; i++) { yangHui[i] = new int[i + 1]; // 第一行一个元素,第二行二个元素... // 2.1给首末元素赋值 yangHui[i][0] = yangHui[i][i] = 1; // 2.2给每行的非首末元素赋值 for (int j = 1; j < yangHui[i].length - 1; j++) { yangHui[i][j] = yangHui[i - 1][j] + yangHui[i - 1][j - 1]; } } // 3.遍历数组 for (int i = 0; i < yangHui.length; i++) { for (int j = 0; j < yangHui[i].length; j++) { System.out.print(yangHui[i][j] + " "); } System.out.println(); } } }
1.2 输出数组中最大、最小、和、平均数的值
定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值,最小值,和值,平均值,并输出出来。
要求:所有随机数都是两位数。
如何通Math.random()获得指定取区间的数字
Math.random():[0.0,1)
Math.random()*90:[0.0,90.0)
(int)(Math.random()*90):[0,89]
(int)(Math.random()*90 + 10):[10,99]
公式:获取[a,b]范围的随机数:
(int)(Math.random()*(b-a) + a)
package com.pyy.contact; /* * 定义一个int型的一维数组,包含10个元素,分别赋一些随机整数, 然后求出所有元素的最大值,最小值,和值,平均值,并输出出来。 要求:所有随机数都是两位数。 */ public class MaxNumber { public static void main(String[] args) { int[] arr = new int[10]; for (int i = 0; i < arr.length; i++) { arr[i] = (int) (Math.random() * (99 - 10 + 1) + 10); } // 求数组元素的最大值 for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + "\t"); } System.out.println(); // 求数组元素的最大值 int maxValue = arr[0]; for (int i = 1; i < arr.length; i++) { if (maxValue < arr[i]) { maxValue = arr[i]; } } System.out.println("最大值为:" + maxValue); // 求数组元素的最小值 int minValue = arr[0]; for (int i = 1; i < arr.length; i++) { if (minValue > arr[i]) { minValue = arr[i]; } } System.out.println("最小值为:" + minValue); // 求数组元素的总和 int sumValue = 0; for (int i = 1; i < arr.length; i++) { sumValue += arr[i]; } System.out.println("和为:" + sumValue); // 求数组元素平均数 double avgValue = sumValue / arr.length; System.out.println("平均数:" + avgValue); } }
赋值
int [] array1,array2 array1 = new int[]{2,3,4,5,7,6}; array2 = array1
两个不同的变量指向了同一个地址
复制
array2 = new int[array1.length]; for(int i = 0;i < array2.length;i++){ array2[i] = array1[i]; }
我们通过new的方式,给array2在堆空间中新开辟了数组的空间,将array1的元素一个一个的赋值到array2数组中
数组的反转
for(int i = 0;j = arr.length - 1;i<j;i++,j--){ String temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; }