• 算法,排序


    算法

    解决某个实际问题的过程和方法!

    学习算法

    1、先搞清楚算法的流程

    2、直接去推敲如何写代码

    排序算法

    冒泡排序

    每次从数组中找出最大值放在数组的后面去。

    1. package algorithm;
    2. import java.util.Arrays;
    3. public class Test1 {
    4. public static void main(String[] args) {
    5. // 1、定义一个数组
    6. int[] arr = {5,2,3,1};
    7. // 2、定义一个循环控制几轮
    8. for (int i = 0; i < arr.length - 1; i++) {
    9. //3、定义一个循环控制每轮比较几次
    10. for (int j = 0; j < arr.length -i - 1; j++) {
    11. //判断当前位置的元素值,是否大于后一个位置处的元素值,如果大则交换
    12. if(arr[j] > arr[j+1]){
    13. int temp = arr[j + 1];
    14. arr[j + 1] = arr[j];
    15. arr[j] = temp;
    16. }
    17. }
    18. }
    19. System.out.println(Arrays.toString(arr));
    20. }
    21. }

    实现冒泡排序的关键步骤分析:

    确定总共需要做几轮:数组的长度 - 1;

    每轮比较次数 。

    当前位置大于后一位置。

    选择排序

    每轮选择当前位置,开始找出后面的较小值与该位置交换。 

    1. package algorithm;
    2. import java.util.Arrays;
    3. public class Test2 {
    4. public static void main(String[] args) {
    5. //1、准备数组
    6. int[] arr = {5, 1, 3, 2};
    7. //2、控制选择几轮
    8. for (int i = 0; i < arr.length - 1; i++) {
    9. // 3、控制每轮选择几次
    10. for (int j = i + 1; j < arr.length; j++) {
    11. // 判断当前位置是否大于后面位置处的元素值,若大于则交换
    12. if(arr[i] > arr[j]){
    13. int temp = arr[i];
    14. arr[i] = arr[j];
    15. arr[j] = temp;
    16. }
    17. }
    18. }
    19. System.out.println(Arrays.toString(arr));
    20. }
    21. }

     实现选择排序优化:

    1. package algorithm;
    2. import java.util.Arrays;
    3. public class Test2 {
    4. public static void main(String[] args) {
    5. //1、准备数组
    6. int[] arr = {5, 1, 3, 2};
    7. //2、控制选择几轮
    8. for (int i = 0; i < arr.length - 1; i++) {
    9. int minIndex = i;
    10. // 3、控制每轮选择几次
    11. for (int j = i + 1; j < arr.length; j++) {
    12. // 判断当前位置是否大于后面位置处的元素值,若大于则交换
    13. if(arr[minIndex] > arr[j]){
    14. minIndex = j;
    15. }
    16. }
    17. if(minIndex != i){
    18. int temp = arr[i];
    19. arr[i] = arr[minIndex];
    20. arr[minIndex] = temp;
    21. }
    22. }
    23. System.out.println(Arrays.toString(arr));
    24. }
    25. }

     选择排序的关键:

    确定总共需要选择几轮:数组的长度-1;

    控制每轮从以前位置为基准,与后面元素选择几次。

    二分查找算法:

     前提条件:数组中的数据必须是有序的;

    核心思想:每次排除一般的数据,查询数据的性能明显提高极多!

    1. package algorithm;
    2. public class Test3 {
    3. public static void main(String[] args) {
    4. //1、准备数组
    5. int[] arr = {7, 23, 79, 80, 103, 124, 134, 146};
    6. System.out.println(binarySearch(arr, 80));//3
    7. System.out.println(binarySearch(arr, 100));//-1
    8. }
    9. public static int binarySearch(int[] arr, int data){
    10. //1、定义两个变量,一个站在左边位置,一个站在右边位置
    11. int left = 0;
    12. int right = arr.length - 1;
    13. //2、定义一个循环控制折半。
    14. while(left <= right){
    15. int mid = (left + right) / 2;
    16. if(arr[mid] > data)
    17. {
    18. right = mid - 1;
    19. }
    20. else if(arr[mid] < data){
    21. left = mid + 1;
    22. }
    23. else{
    24. return mid;
    25. }
    26. }
    27. return -1;
    28. }
    29. }

      正则表达式

     由一些特定的字符组成,代表一个规则。

    作用:

    1、校验数据格式是否合法;

    2、在一段文本中查找满足要求的内容。

    1. package d2_regex;
    2. //校验qq号是否正确,要求全部是数字,长度是6-20之间,不能以0开头
    3. public class RegexTest1 {
    4. public static void main(String[] args) {
    5. System.out.println(checkQQ(null));//false
    6. System.out.println(checkQQ("254167841"));//true
    7. System.out.println(checkQQ("2541ds434"));//false
    8. System.out.println("=================");
    9. System.out.println(checkQQ1(null));
    10. System.out.println(checkQQ1("254167841"));
    11. System.out.println(checkQQ1("2541ds434"));
    12. }
    13. //正则表达式
    14. public static boolean checkQQ1(String qq){
    15. return qq != null && qq.matches("[1-9]\\d{5,19}");
    16. }
    17. public static boolean checkQQ(String qq){
    18. //1、判断qq号码是否为null
    19. if(qq == null || qq.startsWith("0") || qq.length() < 6 || qq.length() > 20){
    20. return false;
    21. }
    22. //2、qq至少是不是null,不是以8开头的,满足6-20之间的长度
    23. //判断qq号码中是否都是数字
    24. //qq = 2514ghd234
    25. for (int i = 0; i < qq.length(); i++) {
    26. //根据索引提取当前位置处的字符
    27. char ch = qq.charAt(i);
    28. //判断ch记住的字符,如果不是数字,qq号码不合法
    29. if(ch<'0'||ch>'9'){
    30. return false;
    31. }
    32. }
    33. return true;
    34. }
    35. }

     规则:

     

  • 相关阅读:
    【001】变量知多少
    动态规划算法(1)
    Android—PMS: installPackagesLI
    Android11 有线网和wifi优先级设置
    决策树(Decision Trees)
    Code For Better 谷歌开发者之声 ——Tensorflow与深度学习
    laravel valet
    【小沐学NLP】Python使用NLTK库的入门教程
    蚓链数字化营销系统与数字资产的关系
    linux之top、ps、free命令详解
  • 原文地址:https://blog.csdn.net/weixin_66852962/article/details/136307838