1. 冒泡排序
- 本质:把n个数中第一大,第二大的数进行n次比较,得出一个新数组。
- 时间复杂度O(n2)—里层和外层都近似循环n次
import java.util.Scanner;
public class BubbleTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
//把输入的string转换为int数组
int[] arr = new int[s.length()];
for (int a=0;a<s.length();a++){
char c = s.charAt(a);
arr[a]=Integer.parseInt(Character.toString(c));
}
//调用排序方法
int[] bubblesort = bubblesort(arr);
//遍历排序后的数组
for (int bu:bubblesort){
System.out.println(bu);
}
}
public static int[] bubblesort(int []arr){
//给了一个状态,可能不需要让每个数都和其他数进行比较
//比如61234,只需要让6和其他数进行比较就能得出12346
boolean flag=false;
int temp=0;
//外层循环是为了让每个数和其他数都进行比较
//比如21354---让2,1,3,5,4都与其他数进行比较
for (int n=0;n<arr.length-1;n++){
//内层循环为了让每个数都能进行length-1-n次比较
//比如21354---第一次比较出来2,1,3,4,5后,第二次2就只用和前四个相计较了
for (int j=0;j<arr.length-1-n;j++){
if (arr[j] > arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
flag=true;
}
}
if (!flag){
break;
}
}
return arr;
}
}
2.快排排序
- 随便选一个作为基准,比基准小的在基准的左边,比基准大的在基准的右边。以此类推。时间复杂度On(logn)—log底为2
3.归并排序
- 一直两两排序,小的在左边大的再右边。时间复杂度On(logn)—log底为2
4.前序,中序,后序遍历
- DLR–前序遍历(根在前,从左往右,一棵树的根永远在左子树前面,左子树又永远在右子树前面 )
- LDR–中序遍历(根在中,从左往右,一棵树的左子树永远在根前面,根永远在右子树前面)
- LRD–后序遍历(根在后,从左往右,一棵树的左子树永远在右子树前面,右子树永远在根前面)
5.深度优先遍历和广度优先遍历
🔗https://developer.51cto.com/art/202004/614590.htm
- 深度优先遍历:一直把一条路走不通之后,再返回此节点的上一个节点,遍历本节点的其他子树
- 广度优先遍历:一层一层的走,第一层走完走第二层,第二层走完走第三层