zoukankan      html  css  js  c++  java
  • 算法初相识---插入排序,冒泡排序,选择排序,以及分析算法

    插入排序---类似于扑克牌那般,每获取到新数值后,就按顺序排序。这种方式,在算法运行的过程中,就会产生,循环不变式和剩余参数。

    循环不变式:循环第一次迭代之前,它为真;如果循环的某次迭代之前为真,那么下次迭代依旧为真;在循环终止时,不变式为我们提供一个有用的性质。

    public static void insertionSort(int[] arr) {
            for (int i = 1; i < arr.length; i++) {
                int j = i;
                while (j > 0 && arr[j] < arr[j - 1]) {
                    swap(arr,j,j-1);
                    j--;
                }
            }
    }

    冒泡排序---顾名思义:从某一角度(最大或最小)浮出水面;取一数,按照某一方向相邻的两个数字进行比较,取最大或最小,直至遍历最后,故将那个数字“浮”出数组。其他数字以此类推。

    public static void bubbleSort(int[] arr) {
            for (int i = 0; i < arr.length - 1; i++) {
                boolean flag = true;//设定一个标记,若为true,则表示此次循环没有进行交换,也就是待排序列已经有序,排序已然完成。
                for (int j = 0; j < arr.length - 1 - i; j++) {
                    if (arr[j] > arr[j + 1]) {
                        swap(arr,j,j+1);
                        flag = false;
                    }
                }
                if (flag) {
                    break;
                }
            }
        }

    选择排序:选择最大(最小)的数字,进行装箱排序。简单来说,任取两数对比留下最大数字,循环对比其他的数字,直至遍历结束后,剩下的数字为最大数字。故:选择最大的数字的排序方式。

    public static void selectSort(int[] arr) {
            for (int i = 0; i < arr.length - 1; i++) {
                int min = i;//每一趟循环比较时,min用于存放较小元素的数组下标,这样当前批次比较完毕最终存放的就是此趟内最小的元素的下标,避免每次遇到较小元素都要进行交换。
                for (int j = i + 1; j < arr.length; j++) {
                    if (arr[j] < arr[min]) {
                        min = j;
                    }
                }
                //进行交换,如果min发生变化,则进行交换
                if (min != i) {
                    swap(arr,min,i);
                }
            }
        } 

    分析算法:预算估计运行算法所需要的内存,通信带宽或计算机这种硬件设施。所以关注点会放在--运行时间和输入规模

    算术指令:加减乘除,取余,向上取整,向下取整

    数据移动:装入,存储,复制

    控制指令:条件与无条件转移,子程序的调用或返回

    输入规模:数据量的大小

    运行时间:指执行的基本操作或步数。

    算法的运行时间:执行每条语句的运行时间之和。

    最坏情况分析:最坏情况分析给出了任何输入的运行时间的一个上界。

    当数据量足够大时:我们真正感兴趣的是运行时间的增长率和增长量级

  • 相关阅读:
    【Html】Clipboard.js 实现点击复制,剪切板操作
    【转】【Python】python使用urlopen/urlretrieve下载文件时出现403 forbidden的解决方法
    【Html】div 加载 html页面的方法
    【WPF】创建文本字符串的路径PathGeometry
    【WPF】自定义鼠标样式
    Linux 错误记录
    微信开放平台代公众号管理
    微信开放平台获取授权公众号的流程
    vue-router "path" is required in a route configuration
    最大连接数“65535”的误解
  • 原文地址:https://www.cnblogs.com/donglt-5211/p/9833494.html
Copyright © 2011-2022 走看看