1.数组的复制,反转与查找
public class ArrayTest01 {
public static void main(String[] args) {
String[] arr = new String[] {"JJ","DD","MM","BB","GG","AA"};
//数组的复制(区别于数组变量的赋值:arr1 = arr)
String[] arr1 = new String[arr.length];
for (int i = 0; i < arr1.length; i++) {
arr1[i] = arr[i];
}
//数组的反转
//反转的操作方法1:
// for (int i = 0; i < arr1.length / 2; i++) {
// String temp = arr1[i];
// arr[i] = arr[arr.length - i - 1];
// arr[arr.length - i - 1] = temp;
//
// }
//方法2:
// for (int i = 0, j = arr.length - 1 ; i < j; i++,j--) {
// String temp = arr1[i];
// arr[i] = arr[j];
// arr[j] = temp;
//
// }
//遍历
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
System.out.println();
//查找(或搜索)
//线性查找
String dest = "BB";
boolean isFlag = true;
for (int i = 0; i < arr.length; i++) {
if(dest.equals(arr[i])) {
System.out.println("找到了指定的元素,位置为:"+ i);
isFlag = false;
break;
}
}
if(isFlag) {
System.out.println("很遗憾,没有找到哦!");
}
//二分法查找
//前提,所要查找的数组必须有序
int[] arr2 = new int[] {-98,-34,2,34,54,66,79,105,210,333};
int dest1 = -34;
int head = 0;
int end = arr2.length - 1;
boolean isFlag1 = true;
while(head <= end) {
int middle = (head + end)/2;
if (dest1 == arr2[middle]) {
System.out.println("找到了指定的元素,位置为:" + middle);
isFlag1 = false;
break;
}else if(arr2[middle] > dest1) {
end = middle - 1;
}else {
head = middle + 1;
}
}
if(isFlag1) {
System.out.println("很遗憾没有找到");
}
}
}
算法介绍:
输入(Input):
有0个或多个输入数据,这些输入必须有清楚的描述和定义
输出(Output):
至少有一个或多个输出结果,不可以没有输出结果
有穷性(有限性,Finiteness):
算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤可以在可接受的时间内完成
确定性(明确性,Definiteness):
算法中的每一步都有确定的含义,不会出现二义性
可行性(有效性,Effectiveness):
算法的每一步都是清楚可行的,能让用户用纸笔计算而求出答案
说明:
满足确定性的算法也称为:确定性算法。现在人们也关注更广泛的概念,例如考虑各种非确定性的算法,如并行算法,概率算法等。另外,人们也关注并不要求终止的计算描述,这种描述有时被称为过程(procedure)