JAVA-初步认识-第五章-数组-常见操作-排序的性能问题

一.

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

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

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

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

时间: 2024-11-06 03:37:26

JAVA-初步认识-第五章-数组-常见操作-排序的性能问题的相关文章

JAVA-初步认识-第五章-数组-常见操作-排序位置

一. 本节是接着前面的冒泡排序的两种书写格式而来的,是以视频中的两种书写格式为基础讲解的,对于我自己琢磨的不适合.注重视频中讲解的思想. 视频中两种书写格式中,内循环都是一样的,为了他提高复用性,将相同的内循环里的执行语句给功能化. →上面理解错了,无论是选择排序还是冒泡排序,有一个通用的操作,就是调换不同索引位置上的数据. 先不对这个做说明, 二. 深入研究两种排序的源代码书写 经过DOS检验没有问题. 这里再对冒泡排序内循环语句的书写做一个解析,(这个数组操作的这一块知识点,均是建立在循环结

JAVA-初步认识-第五章-数组-常见操作-遍历

一. 数组操作 定义好数组后,要存储在数组中的数据拿出来操作.怎么取? 对于数组操作最重要的操作有两种,一个是存,另一个是取.同时,基于这两个操作又衍生出常见的功能性操作. 存取的核心思想:对角标的操作. 二. 之前要求的都是输出数组中的单个数据,如果要求输出数据中的全部数据,仔细观看下面的操作.为了提高复用性,可以采用循环结构来书写语句,while和for都可以,但是for定义的局部代码块可以释放变量.数组操作完,就结束了,称为了垃圾,采用for更好. 如果数组内的元素数目特别多,我们要想全部

JAVA-初步认识-第五章-数组-常见操作-选择排序

一. 排序 元素有很多的情况下,我们都希望元素按照指定的方式有一个顺序,比如说由小到大.排序的方式有很多种,我们讲解其中一种. 例子: 对上面的数组中的元素排个序,从小到大.这个想不出来,之前谈论的是两个数比较,得到大的数. 听了视频的一点讲解,突然有了思路,角标0和角标1进行比较后,将元素的大小做了调换,再继续将角标0和剩余角标的元素进行比较,最终保证角标0中的元素是所有角标中最小的.接着重复将角标1和后面角标中的元素进行比较,再得出一个最小的值,如此往复.这里排序的时候,有一点是要注意的,角

JAVA-初步认识-第五章-数组-常见操作-冒泡排序

一. 冒泡排序 这里介绍了另一种排序的方法,冒泡排序法.选择排序法比较接近人们正常的思维,一个数据和剩下的说有数据比较. 冒泡排序法是临近的数据间进行比较,大的数据就调到右侧,角标1-2的数据对比,角标2-3的数据对比...... 无论是选择排序还是冒泡排序都是先求最值. 冒泡排序法,是一轮一轮地进行左右两侧的数据进行对比.第一轮将所有数据中最大的数据移动到了最右侧,这种操作的核心在于:一直保证大的数据在右侧,那么经过不断地对调,最大的数据肯定在最后一位中.第一轮将最大的数据移动到了最右边,接下

JAVA-初步认识-第五章-数组-常见操作-最值

一. 最值 在视频没有讲解怎么做之前,我先提供一个思路.得出最值肯定是一个一个地比较出来的,这种多次的比较操作,那肯定用到循环结构.每一次操作都要得出两个数中的最大值,也就是说还有判断的if语句.相当于说在循环结构语句中嵌套if判断语句.和视频的讲解对比,我唯一欠缺的是没有说明每次比较的数值是个变量. 同视频讲解对比,自己的思路中没有提到功能化函数.我推测的原因是,需求是要获取最大值,而非我想像的输出最大值,输入数组直接得到最大值,这是一种功能. 注解:这上面求解最值,有两种思路.一种是拿元素进

java学习第05天(数组常见操作、数组中的数组)

(4)数组常见操作 a.遍历取值 class ArrayDemo3 { public static void main(String[] args) { //System.out.println("Hello World!"); //格式1 /* 需要一个容器,但不明确容器的具体数据. */ //int[] arr = new int[8]; //格式2 /* 需要一个容器,储存一直的具体数据. */ //元素类型[] 数组名 = new 元素类型[](元素,元素,....); //i

Java基础知识二次学习--第五章 数组

第五章 数组 时间:2017年4月26日15:11:30~2017年4月26日15:15:54 章节:05章_01节  视频长度:09:30 内容:一维数组的内存分析 心得: Java中数组是引用类型 栈里面存的数组的引用 实际对象在堆内存里面 (C与C++是分配在栈里的) 内存图: 元素为引用数据类型的数组 引用类型的数组如上图 时间:2017年4月26日15:16:22~2017年4月26日15:19:00 章节:05章_02节  视频长度:05:25 内容:数组元素的创建与使用 心得: 首

java学习之第五章编程题示例(初学篇)

1 /* 2 Animal.java 3 */ 4 package animal; 5 6 public abstract class Animal { 7 public abstract void cry(); 8 public abstract String getanimalName(); 9 } 1 //Dog.java 2 package animal; 3 4 public class Dog extends Animal 5 { 6 7 String aa="旺旺"; 8

数据结构期末复习第五章数组和广义表

数据结构期末复习第五章 数组和广义表 二维数组A[m][n]按行优先 寻址计算方法,每个数组元素占据d 个地址单元.     设数组的基址为LOC(a11) :LOC(aij)=LOC(a11)+((i-1)*n+j-1)*d     设数组的基址为LOC(a00) :LOC(aij)=LOC(a00)+( i*n+j )*d    二维数组A[m][n]按列优先 寻址计算方法,每个数组元素占据d 个地址单元.     设数组的基址为LOC(a11) :LOC(aij)=LOC(a11)+((j