数组
数组是相同数据类型的多个数据的容器,数组中的元素是按线性顺序排列的。类似一张单链表,除了第一个元素之外,其余都有唯一前驱元素;除了最后一个元素外,其余都有唯一后继元素。要注意的是,数组一旦初始化成功,则它在内存空间中申请的存储空间就是固定的,无法更改。为数组扩容的办法一般是将小容量的数组添加到大容量的数组中。创建数组一般有两种方法。
方法一:
数据类型[] 数组名称 = {数据1,数据2,数据3...数据n}
int[] array = {1,2,3,4,5};
方法二:
数据类型[] 数组名称 = new 数据类型[数组长度]
int[] array = new int[5]
#####不常用的数组定义格式:
创建数组但不初始化:数据类型[] 数组名。这样创建后续就必须先指定长度(初始化)才能赋值。
int[] array;
array = new int[5];
array[0] = 1;
创建数组,指定内容。数据类型[] 数组名称 = new int[] {数据1,数据2,数据3...数据n}
int[] array = new int[]{1,2,3,4,5};
多维数组创建方法:
方法一(只定义一维):
int[][] array = new array[10][];
方法二(维数全部定义):
int[][] array = new array[10][10];
几种常用的查找排序方法:
冒泡排序:
外层循环控制轮数(array.length-1),内层循环控制每轮比较次数(array.length-i-1)
public static void main(String[] args) {
//定义一个无序数组。
int[] array = {1,6,7,4,5,8};
//外层循环,要比较的轮数。
for (int i = 0; i < array.length-1; i++)
//内层循环,每轮要比较的次数。
for (int j = 0; j < array.length-1-i; j++)
//如果前一个数小于后一个数。
if (array[j] < array[j+1]) {
//交换数组中两个数的位置。
array[j] = array[j]^array[j+1];
array[j+1] = array[j]^array[j+1];
array[j] = array[j]^array[j+1];
}
//打印出数组中元素。
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
二分查找:
必须是一组有序的数据(顺序或者逆序),每次可以减少一半要查找的数据量。一般可以先将数据排序之后再进行二分查找。
public static void main(String[] args) {
//定义一个无序数组。
int[] array = {1,6,7,4,5,8};
//外层循环,要比较的轮数。
for (int i = 0; i < array.length-1; i++)
//内层循环,每轮要比较的次数。
for (int j = 0; j < array.length-1-i; j++)
//如果前一个数小于后一个数。
if (array[j] < array[j+1]) {
//交换数组中两个数的位置。
array[j] = array[j]^array[j+1];
array[j+1] = array[j]^array[j+1];
array[j] = array[j]^array[j+1];
}
//打印出数组中元素。
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + ",");
}
System.out.println();
//二分查找,寻找数组中是否有要查找的值以及如果有的话打印出它的位置。
Scanner input = new Scanner(System.in);
System.out.print("请输入要查找的数字:");
//判断键盘输入值是否是整数。
if (!input.hasNextInt()) {
System.out.println("请输入一个整数。");
} else {
//输入的要查找的数字。
int n = input.nextInt();
//二分查找的数据集所在数组的左下标。初始为最小值。
int left = 0;
//二分查找的数据集所在数组的右下标。初始为最大值。
int right = array.length-1;
//二分查找的要比较的值。
int i = (left + right)/2;
//无限循环查找直到找到或数组中没有这个值跳出。
while (true) {
if (n > array[i]) {
//由于数据集是由大到小排列的,所以如果要查找的数大于比较的数,
//就代表二分后左边的那个数据集是可能包含要查找的那个数。将右下标重新置于已经比较的元素左边一位。
right = i - 1;
//重新计算要比较的元素位置。
i = (left + right)/2;
} else if (n < array[i]) {
//由于数据集是由大到小排列的,所以如果要查找的数小于比较的数,
//就代表二分后右边的那个数据集是可能包含要查找的那个数。将右下标重新置于已经比较的元素右边一位。
left = i + 1;
//重新计算要比较的元素位置。
i = (left