算法
1、 常见的算法
排序算法:
冒泡排序算法
选择排序算法
查找算法:
二分法查找
2、java已经将算法封装好了,直接调用就行。面试可能会碰上。
例如:java中提供了一个数组工具类:
java.util.Arrays
Arrays是一个工具类。其中sort()方法可以排序,sort()方法是静态方法,直接类名调用就行。
冒泡排序算法
1、概念:每一次循环结束之后,都要找出最大的数据,放到参与比较的这堆数据的最右边。(冒出最大的那个气泡)
2、核心:左边的数字和右边的数字比对,当左边>右边的时候,交换位置。
3、代码实现
public class BubbleSort {
public static void main(String[] args) {
//冒泡排序算法
//3、2、7、6、8
//int类型的数组对象
int[] arr = {
3,2,1,6,8};
//经过冒泡排序算法进行排序
for (int i = arr.length-1;i>0;i--){
for (int j = 0; j < i; j++) {
if (arr[j]>arr[j+1]){
int temp;
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
for (int i =0;i < arr.length;i++){
System.out.println(arr[i]);
//12358
}
}
}
选择排序
1、概念:
循环一次,然后找到参加比较这对数据中最小的,拿着这个最小的和最前面的换位置。
选择排序比冒泡排序的效率高。
2、代码的实现
public class SelectSort {
public static void main(String[] args) {
int[] arr = {
3,1,6,2,5};
for (int i = 0; i < arr.length - 1; i++) {
//假设i是最小的
int min = i;
for (int j = i+1;j<arr.length;j++){
//找出后面的最小值
if (arr[j]<arr[min]){
min = j;
}
}
//i不是最小的,就交换位置
if(min != i){
int temp;
temp = arr[min];
arr[min] = arr[i];
arr[i] = temp;
}
}
//遍历输出结果
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
二分法查找
1、普通查找数组元素的方法
public class ArraySearch {
public static void main(String[] args) {
int[] arr = {
4,5,6,87,8};
//普通方法查找元素
// for (int i = 0; i < arr.length; i++) {
// if (arr[i] == 87){
// System.out.println("87的下标是" + i);
// }
// }
// //不存在该元素
// System.out.println("不存在该元素");
//封装一个方法
//一次参数的数组,一个是查找的元素
//返回被查找的元素的下标
//找不到返回-1
int index = arrysearch(arr,87);
//如果inesx等于-1的话,该元素不存在,否则该元素下标是
System.out.println(index ==-1 ? "该元素不存在" : "该元素下标是:"+index);
}
//数组中检索数组的下标
public static int arrysearch(int[] arr, int ele) {
for (int j = 0; j < arr.length; j++) {
if (ele == arr[j]){
return j;
}
}
return -1;
}
}
2、代码实现
public class ArrayUtil {
public static void main(String[] args) {
int[] arr= {
100,200,230,600,1000,2000,9999};
//调用方法
int index = binarySearch2(arr,200);
System.out.println(index == -1 ? "该元素不存在!" : "该下标是" + index);
}
/**
* 从数组中查找目标元素的下标
* @param arr 被查找的数组,必须是排序的
* @param dest 目标元素
* @return
*/
public static int binarySearch2(int[] arr, int dest) {
//开始下标
int begin = 0;
//结束下标
int end = arr.length;
while(begin<=end) {
//中间下标
int mid = (begin + end) / 2;
if (arr[mid] == dest) {
return mid;
} else if (arr[mid] < dest) {
// 目标在中间值的右边
//开始元素的下标需要进行修改(开始元素的下标需要重新赋值)
begin = mid + 1;
} else {
//arr[mid]>dest
//需要重新修改结束的下标
end = mid - 1;
}
}
return -1;
}
}