什么是算法?
- 解决某个实际问题的过程和方法。
排序算法
冒泡排序
- 每次从数组中找出最大值放在数组的后面去。
实现冒泡排序的关键步骤:
- 确定总共需要做几轮:数组长度- 1
- 每轮比较几次
- 当前位置大于后一个位置则交换数据
public static void main(String[] args) {
//1.准备一个数组
int [] arrays={5,2,3,1};
//2.定义一个循环,来控制要循环几轮
// 5 2 3 1
//第一次 0 1 2 3次
//第二次 0 1 2次
//第三次 0 1次
for (int i = 0; i < arrays.length-1; i++) {
for (int j = 0; j < arrays.length-i -1; j++) {
if(arrays[j]>arrays[j+1]){
int temp=arrays[j+1];
arrays[j+1]=arrays[j];
arrays[j]=temp;
}
}
}
System.out.println(Arrays.toString(arrays));
}
选择排序
- 每轮选择当前位置,开始找出后面的较小值与该位置交换
选择排序的关键:
- 确定总共需要做几轮:数组长度-1
- 控制每轮以以前位置为基准,与后面元素选择几次。
public static void main(String[] args) {
//定义一个数组
int [] arrays={5,2,3,1};
//排序
for (int i = 0; i <arrays.length-1 ; i++) {
for (int j = i+1; j < arrays.length; j++) {
if(arrays[i]>arrays[j]){
int temp=arrays[j];
arrays[j]=arrays[i];
arrays[i]=temp;
}
}
}
System.out.println(Arrays.toString(arrays));
查找算法
基本查找/顺序查找
注意:在数据量特别大的时候,基本查找这种从前往后挨个找的形式,性能是很差的!
二分查找(折半查找)
前提条件:数组中的数据必须是有序的
核心思想:每次排除一半的数据,查询数据的性能明显提高很多。
二分查找的实现步骤是什么?
- 定义变量记录左边和右边位置。
- 使用while循环控制二分查询(条件是左边位置<=右边位置)
- 循环内部获取中间元素索引
- 判断当前要找的元素如果大于中间元素,左边位置=中间索引+1
- 判断当前要找的元素如果小于中间元素,右边位置=中间索引-1
- 判断当前要找的元素如果等于中间元素,返回当前中间元素索引。
public static void main(String[] args) {
int []arr={7,23,79,81,103,127,131,147};
System.out.println(binarySearch(arr,81));
}
public static int binarySearch(int [] arr,int data){
int left=0;
int right=arr.length-1;
//2.定义一个循环控制结构
while(left<=right){
//3.每次折半,都算出中间位置处的索引
int middle=(left+right)/2;
//4.判断当前要找的元素值,与中间位置处的元素值的大小情况
if(data<arr[middle]){
//往左边找,截止位置(右边位置)=中间位置-1
right=middle-1;
}else if(data>arr[middle]){
//往右找,起始位置(左边位置)=中间位置+1
left=middle+1;
}else{
//中间位置处的元素值,正好等于我们要找的元素值
return middle;
}
}
return -1; //-1特殊结果,就代表没有找到数据,数组中不存在该数据
}