【在学习中内容不是很完整,会持续更新】
目录
数组中涉及的常见算法(复制、排序、查找)
-
数组的赋值
package Day_01.demo;
/*
使用简单数组
(1)创建一个名为ArrayTest的类,在main()方法中声明array1和array2两个变量,
他们是int[]类型的数组。
(2)使用大括号{},把array1初始化为8个素数:2,3,5,7,11,13,17,19。
(3)显示array1的内容。
(4)赋值array2变量等于array1,修改array2中的偶索引元素,使其等于索引值
(如array[0]=0,array[2]=2)。打印出array1。
思考:array1和array2是什么关系?
*/
public class ArrayTest {
public static void main(String[] args){
int[] array1,array2;
array1 = new int[]{2,3,5,7,11,13,17,19};
for(int i=0;i<array1.length;i++){
System.out.print(array1[i] + "\t");
}
System.out.println();
array2 = array1; //array1的地址给了array2,不能称为数组的复制
for(int i=0;i<array2.length;i++){
if(i%2==0){
array2[i]=i;
}
}
for(int i=0;i<array1.length;i++){
System.out.print(array1[i] + "\t");
}
}
}
2 3 5 7 11 13 17 19
0 3 2 7 4 13 6 19
-
array1和array2地址值相同,都指向了堆空间的唯一的一个数组实体
-
数组的复制
package Day_01.demo;
/*
拓展:修改题目,实现array2对array1数组的复制
*/
public class ArrayTest {
public static void main(String[] args){
int[] array1,array2;
array1 = new int[]{2,3,5,7,11,13,17,19};
for(int i=0;i<array1.length;i++){
System.out.print(array1[i] + "\t");
}
System.out.println();
//数组的复制
array2 = new int[array1.length];
for(int i=0;i<array2.length;i++){
array2[i] = array1[i];
}
for(int i=0;i<array2.length;i++) {
if (i % 2 == 0) {
array2[i] = i;
}
}
for(int i=0;i<array1.length;i++){
System.out.print(array1[i] + "\t");
}
System.out.println();
for(int i=0;i<array2.length;i++){
System.out.print(array2[i] + "\t");
}
}
}
2 3 5 7 11 13 17 19
2 3 5 7 11 13 17 19
0 3 2 7 4 13 6 19
-
数组的反转
package Day_01.demo;
public class ArrayTest_1 {
public static void main(String[] args){
String[] arr = new String[]{"JJ","HH","BB","NN","QQ"};
//数组的反转
//方法一
for(int i=0;i<arr.length / 2;i++){
String temp = arr[i];
arr[i] = arr[arr.length - i -1];
arr[arr.length - i -1] = temp;
}
//方法二
for(int i=0,j=arr.length -1;i<j;i++,j--){
String temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
for(int i=0;i<arr.length;i++){
System.out.print(arr[i] + "\t");
}
}
}
-
数组的查找
-
线性查找
-
package Day_01.demo; public class ArrayTest_2 { public static void main(String[] args){ String[] arr = new String[]{"JJ","HH","BB","NN","QQ"}; //查找 //线性查找 String dest = "BB"; boolean isFlag = true; for(int i=0;i< arr.length;i++){ if(dest.equals(arr[i])) { System.out.println("找到了指定的元素,位置为:" + (i+1)); isFlag = false; break; } } if(isFlag) { System.out.println("很遗憾,没有找到哦!"); } } }
-
二分查找(所要查找的数组必须有序)
-
排序
-
冒泡排序
- 比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较为止。
-
-
package Day_01.demo;
public class BubbleSortTest {
public static void main(String[] args){
int[] arr = new int[]{23,90,45,-23,55,10,24,78,-19};
//冒泡排序
for(int i=0;i< arr.length-1;i++){ //n个元素进行n-1次冒泡排序
for(int j=0;j< arr.length-i-1;j++){
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
for(int i=0;i< arr.length;i++){
System.out.print(arr[i] + "\t");
}
}
}