算法

作者: Anwfly | 来源:发表于2020-07-28 22:53 被阅读0次

一、数组的操作

1、 冒泡排序

相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处

public static void main(String[] args) {
    // 定义一个数组
    int[] arr = { 24, 69, 80, 57, 13 };
    System.out.println("排序前:");
    printArray(arr);        
    //由于我可能有多个数组要排序,所以我要写成方法
    bubbleSort(arr);
    System.out.println("排序后:");
    printArray(arr);
}

//冒泡排序代码
public static void bubbleSort(int[] arr){
    for (int x = 0; x < arr.length - 1; x++) {
        for (int y = 0; y < arr.length - 1 - x; y++) {
            if (arr[y] > arr[y + 1]) {
                int temp = arr[y];
                arr[y] = arr[y + 1];
                arr[y + 1] = temp;
            }
        }
    }
}

// 遍历功能
public static void printArray(int[] arr) {
    System.out.print("[");
    for (int x = 0; x < arr.length; x++) {
        if (x == arr.length - 1) {
            System.out.print(arr[x]);
        } else {
            System.out.print(arr[x] + ", ");
        }
    }
    System.out.println("]");
}                                  

运行效果:

结果.png

原理图:

冒泡排序.png

2. 选择排序

从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处

public static void main(String[] args) {
    // 定义一个数组
    int[] arr = { 24, 69, 80, 57, 13 };
    System.out.println("排序前:");
    printArray(arr);
    
    selectSort(arr);
    System.out.println("排序后:");
    printArray(arr);
}   
public static void selectSort(int[] arr){
    for(int x=0; x<arr.length-1; x++){
        for(int y=x+1; y<arr.length; y++){
            if(arr[y] <arr[x]){
                int temp = arr[x];
                arr[x] = arr[y];
                 arr[y] = temp;
            }
        }
    }
}
// 遍历功能
public static void printArray(int[] arr) {
    System.out.print("[");
    for (int x = 0; x < arr.length; x++) {
        if (x == arr.length - 1) {
            System.out.print(arr[x]);
        } else {
            System.out.print(arr[x] + ", ");
        }
    }
    System.out.println("]");
}                                       

运行效果:

结果.png

原理图:

选择排序.png

3. 了解二分查找

  1. 查找:
    首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置录记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

  2. 分析:

    A:定义最大索引,最小索引
    B:计算出中间索引
    C:拿中间索引的值和要查找的值进行比较
     相等:就返回当前的中间索引
     不相等:
         大   左边找
         小   右边找
    D:重新计算出中间索引
         大   左边找
             max = mid - 1;
         小   右边找
             min = mid + 1;
    E:回到B
    
  3. 代码:

    public static void main(String[] args) {
        //定义一个数组
        int[] arr = {11, 22, 33, 44, 55, 66, 77};
        //写功能实现
        int index = getIndex(arr, 33);
        System.out.println("index:" + index);
        //假如这个元素不存在后有什么现象呢?
        index = getIndex(arr, 333);
        System.out.println("index:" + index);
    }
    
    /*
    * 两个明确:
    * 返回值类型:int
    * 参数列表:int[] arr,int value
    */
    public static int getIndex(int[] arr, int value) {
        //定义最大索引,最小索引
        int max = arr.length - 1;
        int min = 0;
        //计算出中间索引
        int mid = (max + min) / 2;
        //拿中间索引的值和要查找的值进行比较
        while (arr[mid] != value) {
            if (arr[mid] > value) {
                max = mid - 1;
            } else if (arr[mid] < value) {
                min = mid + 1;
            }
            //加入判断
            if (min > max) {
                    return -1;
                }
                mid = (max + min) / 2;
            }
            return mid;
     }
    

4. 运行效果:

运行结果.png
  1. 原理图:
二分查找.png

相关文章

  • 匈牙利算法

    算法思想 算法流程 算法步骤 算法实现 python 算法应用

  • web开发需要知道的几个算法

    算法分类 快速排序算法 深度优先算法 广度优先算法 堆排序算法 归并排序算法

  • 机器学习算法

    机器学习的算法分监督算法和无监督 算法。监督算法包括回归算法,神经网络,SVM;无监督算法包括聚类算法,降维算法。...

  • 字符串匹配

    BF 算法和 RK 算法BM 算法和 KMP 算法

  • 垃圾回收算法有几种类型? 他们对应的优缺点又是什么?

    常见的垃圾回收算法有: 标记-清除算法、复制算法、标记-整理算法、分代收集算法 标记-清除算法 标记—清除算法包括...

  • 头条-手撕代码

    [toc] 图算法 以及最短路径算法 树算法 手写LRU 排序算法 链表算法

  • 关于一些算法

    我们平常说的算法按照使用方向加密算法,排序算法,搜索算法,优化算法,音视频处理算法,图片处理算法 1.加密解密算法...

  • 给我巨大影响的技术书籍

    算法《算法概论》《算法设计与分析基础》 Anany Levitin《算法引论》Udi Manber《算法导论》《什...

  • 缓存相关

    cache淘汰算法:LIRS 算法 缓存那些事 Redis缓存淘汰算法,LRU算法,LRU算法讲解

  • LZW压缩算法

    参考链接:超级简单的数据压缩算法—LZW算法压缩算法——lzw算法实现LZW算法 LZW 压缩算法正确图解

网友评论

      本文标题:算法

      本文链接:https://www.haomeiwen.com/subject/jhafrktx.html