- 博客(5)
- 收藏
- 关注
原创 (算法)归并排序。
先进行比较,若 l 指向的数小于 r 指向的数,则将 l 指向的数拿出来,l 向右移动一位。若两者相等,则为了保证算法的稳定性,一般将左边的值先拿出来。拿出来后,向指针继续向右移动一位,依次类推进行比较(拿出来的数都放在一个新数组中)。直到有一方的数全部拿出为止(假设上面一组拿出完后,下面一组还剩三个数,则直接将这三个数插入新的数组中,因为归并排序是先递归所以数组都是有序的)将原数组里的数按照上述步骤分为如下两个数组(因为要先递归,所以已经有序了)2.先递归中点左右两边的值,使其成为有序。
2023-11-08 21:02:11
63
1
原创 【无标题】简单选择排序和直接选择排序的区别(使用下标记录最小位置和直接交换的区别)
实际上在打印第一步排序前,已经交换多次,最后得到上图第一步排序结果,我们姑且称它为直接选择排序。(而简单选择排序只用最后交换一次)正规的简单选择排序如下,每一步排序只交换一次(即内层for循环执行完后,交换一次)这两者最大的区别就是交换次数,虽然最终的交换结果一样,但过程还是不一样的。最近感悟的一道基础题(简单选择排序是什么自己查)11 64 25 22 12(第一步排序完成)直接选择排序在打印第一步前的交换如下。
2023-11-05 14:03:04
701
1
原创 每日多题哈哈
交换后显然跳过了该元素的删除,如2,3,3,2,设val=2,则最后得到的是2,3,3。numsize为数组长度,减一既忽略最后一个值的大小,变相看作删除了一个数。因此需要用while循环替代即可。(2)循环遍历数组,之后将每遇到和val相等的元素,则将val放置与数组最后的一个元素交换。但是这个代码这样写对吗?显然不对,如果第一个元素和最后一个元素相等,if只会判断一次。while循环内为什么要加numsize。并使用一个j交换的次数,即val的个数。(1)一位师兄的题解。
2023-11-05 09:28:58
57
1
原创 数组中两元素的最大乘积
里面的max记录相乘的积,如果后面两数的乘积比max大则替代原本的max成为新的max。不大于则继续进入上面的for循环进行判断(类似于排序的感觉)前两段for循环,遍历数组内所有元素,为下一步相乘做准备。如果j不等于i,则意味着相乘的两个数不为数组中的同一个数,之后两相乘。因此最终的max肯定为数组内最大数乘以次大数。有更简单算法,但懒得写了。
2023-11-04 20:22:47
329
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人