zoukankan      html  css  js  c++  java
  • Java常见算法

    选择排序

    代码

        //对数组进行 '升序' 排列
        private static void sortChoose(int[] arr) {
            for (int x = 0; x < arr.length; x++) {
                for (int y = x + 1; y < arr.length; y++) {
                    if (arr[x] > arr[y]) { //控制 升序 or 降序
                        //临时获取:两个数中的最大值
                        int temp = arr[x];
                        arr[x] = arr[y];
                        arr[y] = temp;
                    }
                }
            }
        }
        }
    

    原理说明:0索引和后续的索引比较、1索引和后续的索引比较......首次循环,可以得出 最小值 或 最大值。

    冒泡排序

    代码

        //对数组进行 '升序' 排列
        private static void sortBubble(int[] arr) {
            for (int x = 0; x < arr.length; x++) {
                for (int y = 0; y < arr.length - x - 1; y++) {
                    if (arr[y] > arr[y + 1]) { //控制 升序 or 降序
                        //临时获取:两个数中的最大值
                        int temp = arr[y]; 
                        arr[y] = arr[y + 1];
                        arr[y + 1] = temp;
                    }
                }
            }
        }
    

    原理说明:相邻的两个元素比较,位置互换。首次循环,可以得出 最小值 或 最大值。

    二分/折半 查找

    代码

        //参数arr:有序数组; 参数key:需要查找的元素
        private static int binarySearch(int[] arr, int key) {
            int index = -1;
            //定义三个变量,保存数组的最小、中间、最大的索引
            int min = 0, mid = 0, max = arr.length - 1;
            //循环的条件:小索引<=大索引
            while (min <= max) {
                mid = (min + max) / 2;
                if (arr[mid] < key) {
                    min = mid + 1;
                } else if (arr[mid] > key) {
                    max = mid - 1;
                } else {
                    index = mid;
                    break;
                }
            }
            return index;
        }
    

    说明:使用:二分/折半 查找某个元素,若存在-则返回元素在数组里面的索引;若不存在-则返回-1。
    特别注意:若需要查找的数组是无序的,切记:不可使用二分/折半查找,更不要数组进行排序(排序会导致数组元素的索引变更)!

  • 相关阅读:
    BZOJ 3997: [TJOI2015]组合数学 [偏序关系 DP]
    [Sdoi2017]新生舞会 [01分数规划 二分图最大权匹配]
    [Sdoi2017]相关分析 [线段树]
    [Sdoi2017]硬币游戏 [高斯消元 KMP]
    [Sdoi2017]序列计数 [矩阵快速幂]
    [Sdoi2017]树点涂色 [lct 线段树]
    [Sdoi2017]数字表格 [莫比乌斯反演]
    BZOJ 3160: 万径人踪灭 [fft manacher]
    Rabbitmq常见测试
    MQ(消息队列)功能介绍
  • 原文地址:https://www.cnblogs.com/io1024/p/11532676.html
Copyright © 2011-2022 走看看