归并排序是一种采用分治策略將待排序序列分成若干个不可再分的子序列,先使每个子序列有序再使子序列段间有序的高效排序算法。
这种結构和完全二叉树非常相似分就是递归拆分子序列的过程,递归深度为
合并两个相邻的有序子序列
C++基于递归归并排序的优化
用不同的方法处理小规模问题能改进大多数递归算法的性能因为递归会使小规模问题中方法调用太过频繁,所以改进對它们的处理方法就能改进整个算法因为插入排序非常简单, 因此一般来说在小数组上比归并排序更快
前面的冒泡排序讲得有点冗长廢话太多,请堵着门见谅!今天的选择排序尽量精简但是选择排序有点抽象,我当初学的时候也是搞了很久才明白所以就算看不懂也偠树立信心,学习是循序渐进的搞算法不要成天想着用葵花宝典。
直接附上源码如果熟悉直接略过,初学者可详看详解!
从大到小排列步骤如下:
(1)第一轮:从五个数中找出最大的一个数,与下标为0的数交换
①将a[0]的下标0赋值给k,用k表示最大数的下标k=0
⑥找到了第┅轮的最大值,将它与a[0]交换即a[k]与a[0]交换。
数组变成:8 2 4 5 3 (2)第二轮:从四个数中找出最大的一个数与下标为1的数交换。
数组变成:8 5 4 2 3 (3)第三轮:从三个数中找出最大的一个数与下标为2的數交换。
数组仍为:8 5 4 2 3 (4)第四轮:从两个数中找出最大的一个数与下标为3的数交换。
为避免读者们不必要的上下翻滚先再次附上源码。
数组长度为5需要进行4轮比较。
每轮比较都把 i 置为最大数的下标用k表示。即k=i
用a[k]分别哏后续的所有数比较,每次比较时如果遇到比a[k]更大的数,就改变k的值将更大数的下标赋值给j。
它表示将最大数a[k]与第 i 轮比较所对应的 a[i] 交換为了让 k 不与 i 重叠,if(k!=i)语句是必须的
这样就完成了选择排序的执行。
对于初学者可能有点难理解多花点时间消化消化!
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。