门户网站建设询价公告,网站开发+语音,wordpress侧栏跟随,富平网站建设民以食为天#xff0c;我以乐为先 嘴上来的嘘寒问暖#xff0c;不如直接打笔巨款
一、选择排序
1.直接选择排序 SelectSort
1.1 基本思想
1.2 实现原理
1.3 代码实现
1.4 直接选择排序的特性总结
2.堆排序 HeapSort
跳转链接#xff1a;数据结构 之 堆的应用
二、完… 民以食为天我以乐为先 嘴上来的嘘寒问暖不如直接打笔巨款
一、选择排序
1.直接选择排序 SelectSort
1.1 基本思想
1.2 实现原理
1.3 代码实现
1.4 直接选择排序的特性总结
2.堆排序 HeapSort
跳转链接数据结构 之 堆的应用
二、完结撒❀
–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀-正文开始-❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–
一、选择排序
1.直接选择排序
1.1 基本思想
original版原始版
每一次从待排序的数据元素中选出最小或最大的一个元素存放在序列的起始位置直到全部待排序的数据元素排完。
optimize版优化版
每一次从待排序的数据元素中选出最小和最大的两个元素分别存放在序列的起始位置和队尾位置直到全部待排序的数据元素排完。
1.2 实现原理
这里我们讲解optimize版
在元素集合array[0]–array[n-1]中选择值最大和值小的数据元素
若最大值不是这组元素中的最后一个元素则将它与这组元素中的最后一个元素交换若最小值不是这组元素中的第一个元素则将它与这组元素中的第一个元素进行交换
在剩余的array[1]–array[n-2]集合中重复上述步骤直到集合剩余1个元素或2个元素
因为我们完成一次循环后就可以将数组开头下标加1结尾下标减一所以我们需要记录下标实现交换
这里直接说明按照上述逻辑执行到数组中剩下两个元素的时候可能会出现BUG当剩下两个下标对应值不符合逻辑时会相互进行两次交换但这时只进行一次交换就足够
动态图解
1.3 代码实现
void Swap(int* p, int* q)
{int tmp *p;*p *q;*q tmp;
}//选择排序 同时选出最大和最小的两个数据
void SelectSort(int* a, int n)
{int begin 0;int end n - 1;while (beginend){int mini begin, maxi begin;//选出最大和最小值for (int i begin 1; i end; i){if (a[i] a[mini]){mini i;}if (a[i] a[maxi]){maxi i;}}Swap(a[begin], a[mini]);if (begin maxi)//!!!{maxi mini;}Swap(a[end], a[maxi]);begin;--end;}
}1.4 直接选择排序的特性总结
1. 直接选择排序思考非常好理解但是效率不是很好。实际中很少使用
2. 时间复杂度O(N^2)
3. 空间复杂度O(1)
4. 稳定性不稳定
2.堆排序
跳转链接数据结构 之 堆的应用 堆排序我之前博客有讲大家直接跳转学习即可
二、完结撒❀
如果以上内容对你有帮助不妨点赞支持一下以后还会分享更多编程知识我们一起进步。 最后我想讲的是据说点赞的都能找到漂亮女朋友❤