已知在一维数组A[m + n]中依次存放两个线性表
为什么书本上写的是循环到mid-left,但有的是循环到mid,看不懂什么意思
有的题目只写mid,可能是因为,对于要交换的数组元素下边就是从0开始的,就是直接把整个数组元素都颠倒顺序;但是你这个函数,是可以指定要要换的那些元素,比如说A[0,m],我只颠倒其中的一部分元素,如[3,6],那么此时这个mid-right就是指的循环的位置,到4的时候就结束循环,这个函数是指定区间内的元素,第一个和最后一个交换,所有循环走到一半就可以完成整个区间内元素的位置交换。
问题: 问题标题: 数组逆置时循环终止条件的疑惑: 在一维数组A[m + n]中依次存放两个线性表,为什么书本上写的是循环到mid-left,但有的是循环到mid,我不太理解这两种写法的含义。
问题内容: 在我阅读有关数组逆置算法的学习材料时,我注意到循环终止条件有两种写法,一种是循环到mid-left,另一种是循环到mid。这两种写法分别代表着什么含义,为什么有些情况下是循环到mid,而有些情况下是循环到mid-left?我希望能够理解这两种写法的用途和区别。
为了更好地理解,请解释以下问题: 1. 数组逆置的算法是指将一个一维数组中存放的元素顺序反转的操作。 2. 一维数组A[m + n]中存放了两个线性表,即两个有顺序的元素集合。 3. "循环到mid-left"指循环的终止条件是什么,这种写法所代表的意义是什么? 4. "循环到mid"指循环的终止条件是什么,这种写法所代表的意义是什么?比起"循环到mid-left"有什么区别? 5. 我想理解为什么在具体的情况下,有时候选择循环到mid,有时候选择循环到mid-left的写法。
请根据以上提示优化问题,并提交。
参考资料: 段落0: 思路:既然数中每个结点对应的区间我们已经知道了,那么对于任何一个要修改的元素,当访问到某个结点的时候,它要么是在这个结点的左分支上,要么就在他的右分支上,只取决于他和mid的大小关系,知道往哪走后然后进入下一个结点继续判断,一直到底,就是要改的那个元素了。 我们先把这颗树对应结点的区间大小在图中补上
段落1: 这里需要对堆有一定的了解,堆就是一个比较特殊的完全二叉树,在最大堆里,每个节点的值都大于其左右两个孩子节点的值。这就是最大堆。反之就是最小堆。拿最大堆举例子,每次堆顶的元素值,不就是当前数列的最大吗?这不就成选择排序里的简单排序了吗?找完之后,将他和完全二叉树里最后一个结点的值进行交换,然后做一个自顶向下的自我调整,将他再次调整成一个完全二叉堆。第二次取最大的树,这时我们需要将上一次找到的结点屏蔽掉,不然会陷入一个死循环。无数次找完之后,再按层序的思想将二叉树里的数据遍历到一个数组当中,这时的数组为一个有序的数组。 算法思想
段落2: 名字已经暴露了他的算法,就是往里面插入数据,就拿我们生活中的例子来说,打扑克牌。我们往手里码牌的时候,是一张一张的码,先码一张,抓手心,不需要修改位置,因为只有一张牌,一定是有序的。再接一张,和手里的牌对比大小,调整位置,选择放在它的左边或者右边。然后接着码,又接到一张牌,拿到先和右边的牌比,比右边还大就放到最右边,如果比右边这张小呢,在和左边这张比。同样,我们这里也是这样的,首先我们默认第一个元素,一定是有序,OK吧。然后第二个,元素比较,大,放到左边,小放到右边。然后第三个元素,直到第N个,比它前一个大,继续往前找位置,直到找到对应位置了,就是有序数列了。(当然每次找位置都是在一个有序的序列中找,所以完全可以用二分查找找位置,数据大的话,二分明显快于我们一张一张比) 算法思想
段落3: 我们老师给我们花了100个星星的重要,那就是非常重要,快速排序。名字就很嚣张。。。言归正传,快排采用了分治算法。把大问题,分解成小问题。首先我们先找一个基准值,基准值的寻找法,有很多,这里我先用一个取边上值得方法,找到基准值以后呢拿着这个基准值和所有数组比较,使这个数组中比基准值小的都放左边,比基准值大的都放到右边,然后就把原来数组分成三块,中间基准值,左边都是比它小的,右边都是比它大的。然后这两个数组,继续分,一直分。直到他的终止条件,也就是小数组有序了就停止,那么什么时候有序停止呢?小区间长度为1或者长度为0的时候,就是有序了。所有小数组都有序了,那么就是整个数组有序了。只是原理,那么问题,又来了,怎么放左放右呢?我目前会三种。 算法思想
问题优化后:
问题标题: 数组逆置时循环终止条件的疑惑: 在一维数组A[m + n]中依次存放两个线性表,为什么书本上写的是循环到mid-left,但有的是循环到mid,我不太理解这两种写法的含义。
问题内容: 在我阅读有关数组逆置算法的学习材料时,我注意到循环终止条件有两种写法,一种是循环到mid-left,另一种是循环到mid。这两种写法分别代表着什么含义,为什么有些情况下是循环到mid,而有些情况下是循环到mid-left?我希望能够理解这两种写法的用途和区别。
请解释以下问题: 1. 数组逆置的算法是指将一个一维数组中存放的元素顺序反转的操作。 2. 一维数组A[m + n]中存放了两个线性表,即两个有顺序的元素集合。 3. "循环到mid-left"指循环的终止条件是什么,这种写法所代表的意义是什么? 4. "循环到mid"指循环的终止条件是什么,这种写法所代表的意义是什么?比起"循环到mid-left"有什么区别? 5. 在不同情况下为什么有时候选择循环到mid,有时候选择循环到mid-left的写法?
参考资料: 段落0: 思路:既然数中每个结点对应的区间我们已经知道了,那么对于任何一个要修改的元素,当访问到某个结点的时候,它要么是在这个结点的左分支上,要么就在他的右分支上,只取决于他和mid的大小关系,知道往哪走后然后进入下一个结点继续判断,一直到底,就是要改的那个元素了。 我们先把这颗树对应结点的区间大小在图中补上
段落1: 这里需要对堆有一定的了解,堆就是一个比较特殊的完全二叉树,在最大堆