zoukankan      html  css  js  c++  java
  • Java基础5一数组的常见应用算法

    常用算法

    1.冒泡排序:

    原理:比较两个相邻的元素,将值大的元素交换至右端

    示例:

    public static void bubbleSort(int[] a) {
        int n = a.length;
        //总共进行n-1轮的比较
        for (int i = 1; i < n; i++) {
            for (int j = 0; j < n - i; j++) {
                if (a[j] > a[j + 1]) {//交换
                    int temp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = temp;
                }
            }
        }
    }

    2.选择排序:

    原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕。

    示例:

    public static void selectionSort(int[] a) {        
        for(int i = 0; i < a.length - 1; i++) {// 做第i趟排序
            int m = i;
            for(int j = i + 1; j < a.length; j++){// 选最小的记录
                if(a[j] < a[m]){
                    m = j; //记下目前找到的最小值所在的位置
                }
            }
            if(i != m){  //交换a[i]和a[m]
                int temp = a[i];
                a[i] = a[m];
                a[m] = temp;
            }
        }    
    }

    3.插入排序:

    原理:从数组的第一个元素a[0]开始,将其后一个元素a[1]插入到a[0]的前面或者后面,接着继续这一过程。每次都是将a[i]插入到已经排序好的a[0]~a[i-1]中合适的位置

    示例:

    public static void insertSort(int[] a) {
        for (int i = 1; i < a.length; i++) {
            for (int j = i; j > 0; j--) {
                if (a[j] < a[j - 1]) {
                    int temp = a[j];
                    a[j] = a[j - 1];
                    a[j - 1] = temp;
                } else {
                    break;
                }
            }
        }
    }

    4.快速排序:

    • 快速排序是对冒泡排序的一种改进
    • 思想:在数组中找出适当的轴心,然后将数组一分为二,分别对左边与右边数组进行排序

    二分查找

    • 前提条件: 已排序的数组中查找
    • 二分查找的基本思想是:

        – 首先确定该查找区间的中间点位置: int mid = (low+upper) / 2;

        – 然后将待查找的值与中间点位置的值比较:

      • 若相等,则查找成功并返回此位置。
      • 若中间点位置值大于待查值,则新的查找区间是中间点位置的左边区域。
      • 若中间点位置值小于待查值,则新的查找区间是中间点位置的右边区域。下一次查找是针对新的查找区间进行的。

    示例:

    public static int binarySearch(int[] a, int num) {
        int low = 0;                                  // 起点
        int upper = a.length - 1;              // 终点
        while (low <= upper) {
            int mid = (low + upper) / 2;     // 中间点
            if (a[mid] < num) {                  // 中间点的值小于要查找的值
                low = mid + 1;                    // 更改查找的起点为中间点位置后一位
            } else if (a[mid] > num) {        // 中间点的值大于要查找的值
                upper = mid - 1;                 // 更改查找的终点为中间点位置前一位
            } else {                                   // 中间点的值等于要查找的值
                return mid;                         // 返回该位置
            }
        }
        return -1;
    }            

    数组帮助类Arrays

    • java.util.Arrays 数组操作工具
    public static void sort(int[] a);  //经过调优的快速排序法
    public static int binarySearch(int[] a, int key); //使用二分搜索法

    二维数组

    • Java并没有真正的多维数组,二维数组可以看成以数组为元素的数组。如:
    int [][] a = { {1}, {4,5,6}, {7,8}};
  • 相关阅读:
    【分享】使用 AXI performance monitors (APM)测试MPSoC DDR访问带宽
    测试MPSoC GEM 的1588功能
    使用ffmpeg把mp4转换为NV12文件
    强制开放MPSoC的PS-PL接口
    Java操作数据库指南(之一)
    大数据中台技术架构
    数据仓库到数据中台的演进
    Spark SQL入门到实战之(8)数据倾斜优化
    项目实战从0到1之hive(47)大数据项目之电商数仓(用户行为数据)(十五)
    项目实战从0到1之hive(46)大数据项目之电商数仓(用户行为数据)(十四)
  • 原文地址:https://www.cnblogs.com/smart-hwt/p/8184354.html
Copyright © 2011-2022 走看看