简单认识算法
什么是算法?
解决某个实际问题的过程和方法!
排序算法
冒泡排序
选择排序
冒泡排序
· 每次从数组中找到最大值 放在数组的后面去
java
import java.util.Arrays;
public class Work1 {
public static void main(String[] args) {
//准备一个数组
int[] arr = {5,2,3,1};
//定义一个循环控制排几轮
for (int i = 0; i < arr.length-1; i++) {
//定义一个循环控制每轮比较几次
for (int j = 0; j < arr.length-i-1; j++) {
//判断当前位置的元素值,是否大于后一个位置处的元素值,如果大则交换
if (arr[j]>arr[j+1]){
int temp = arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
选择排序
每轮选择当前位置,开始找出后面 的较小值与该位置交换
java
import java.util.Arrays;
public class Work1 {
public static void main(String[] args) {
//准备一个数组
int[] arr = {5,2,3,1};
//定义一个循环控制选择几轮
for (int i = 0; i < arr.length-1; i++) {
//定义一个循环控制每轮选择几次
for (int j = i+1; j < arr.length; j++) {
//判断当前位置的元素值,是否大于后面位置处的元素值,如果大则交换
if (arr[i]>arr[j]){
int temp = arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
优化
java
import java.util.Arrays;
public class Work1 {
public static void main(String[] args) {
//准备一个数组
int[] arr = {5,2,3,1};
//定义一个循环控制选择几轮
for (int i = 0; i < arr.length-1; i++) {
int minIndex = i;
//定义一个循环控制每轮选择几次
for (int j = i+1; j < arr.length; j++) {
//判断当前位置的元素值,是否大于后面位置处的元素值,如果大则交换
if (arr[minIndex]>arr[j]){
minIndex=j;
}
}
//决定是否交换
if (i!=minIndex){
int temp = arr[i];
arr[i]=arr[minIndex];
arr[minIndex]=temp;
}
}
System.out.println(Arrays.toString(arr));
}
}
查找算法
基本查找 /(顺序查找)
注意:在数据量特别大的时候,基本查找这种从前往后挨个找的形式,性能是很差的!
二分查找(折半查找)
前提条件:数组中的数据必须是有序的
核心思想:每次排除一半的数据,查询数据的性能毛线提高极多!
二分查找正常的折半条件应该是开始位置 left <=结束位置 right
java
public class Work1 {
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;
//定义一个循环控制折半
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特殊结果,就代表没有找到数据,数组中不存在该数据
}
}
Java提供的 binarySearch 方法可以直接应用
java
public class Work1 {
public static void main(String[] args) {
//准备一个数组
int[] arr = {7,23,79,81,103,127,131,147};
System.out.println(binarySearch(arr, 81));
System.out.println(Arrays.binarySearch(arr, 81));
}
}