zoukankan      html  css  js  c++  java
  • JAVA-初步认识-第五章-数组-常见操作-排序的性能问题

    一.

    这里对前面的选择排序操作进行了深化,之前讨论的选择排序是将0角标上的数据和后面角标的数据一个个进行对比,不断地调换数据的位置,直到0角标上的数据是整个数组中的最小值。由于调换的次数较多,现在引发一个疑问,能不能直接将0角标的数据和最小数据进行对换(前提是知道最小数据的角标是多少)。

    之前的例子里,选择排序中,进行了三次比较调换数据,才使得角标0上的数据是最小的。现在要换个思路来解决相同的问题。

    具体的操作是:先定义两个变量,为什么要定义两个变量?一个变量记录用于比较的元素num,一个变量记录角标值。

    思考:通过视频讲解,这里是开辟了两个新的变量作为记录的地方,然后在这两个变量上进行操作,比较的过程中,不对数组进行任何操作。经过所有的比较后,两个变量记录的是最小值和最小值的角标。最后,直接将数组中的,0角标的数据和4角标的数据进行数据交换。这个思路相较于之前的解题来说,进行了一个前期的铺垫。其实,我觉着这个思路的过程中,操作也挺多的。增加了比较记录的次数,减少了交换的次数。那两个变量是存储在栈内存中的。

     如果改变调换语句,结果如下

    注解:多条语句写在一行的书写格式不清楚。同时定义多个变量时,变量之间可以采用逗号隔开,但是不同的表达式在一行连用时,就不能用逗号隔开。

    视频的解题中,还比我们多了一步就是判断是否0角标的数据就是最小值,要进行检查。

    注解:这种思路相比较之前的选择排序,调换位置上的数据次数是减少了。效率会比之前的选择排序效率高一些,为什么?下面将每一步的思路都改成了现在谈论的定义两个变量的思路。

    这里选择排序中的两种思路,第一种思路是在一轮中,进行了多次调换位置;第二种思路是在一轮中,用了两个变量标记,进行了一次调换位置。在数据数目很多的情况下,第二种思路的效率要比第一种高的多。

  • 相关阅读:
    Flutter Icons 内置图标库,全套Material图标
    解决cannot connect to daemon at tcp:5037: cannot connect to 127.0.0.1:5037: 由于目标计算机积极拒绝,无法连接。 (10061).
    mavenCentral()、jcenter()、google()仓库
    flutter doctor检查出现多个Android Studio解决办法
    Oracle trunc 函数用法详解
    将博客搬至CSDN
    Yii2 高级模板不使用Apache配置目录,将前后台入口移到根目录
    报警告session_regenerate_id(): Failed to create(read) session ID: files (path: N;/path)
    yii2GridView的简单使用
    yii 表单如何写,action指向哪里?
  • 原文地址:https://www.cnblogs.com/wsw-bk/p/7616376.html
Copyright © 2011-2022 走看看