admin管理员组文章数量:1033654
【初探数据结构】详解三大经典排序算法(选择/堆/冒泡)
引言
排序算法是数据结构的核心基础。本文通过选择排序、堆排序、冒泡排序的对比解析,帮助初学者掌握算法思想与实现细节。文末附算法对比总结表。
一、选择排序(Selection Sort)
1.1 核心思想
“选最小的,放左边” 或 “选最大的,放右边” 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完
这里我们在序列两头同时进行选择排序,可以一定程度上提高选择排序的性能。
1.2 动态示意图
[示例数组:7, 3, 5, 1]
- 第1轮:找到最小值1 ↔ 与7交换 →
[1, 3, 5, 7]
- 第2轮:在剩余部分找最小3(已在正确位置)
- 第3轮:找最小5 ↔ 无需交换
- 排序完成
1.3 代码实现
代码语言:javascript代码运行次数:0运行复制void SelectSort(int* a, int n)
{
//定义左右指针
int left = 0;
int right = n - 1;
//当左右指针相遇,排序完成
while (left < right)
{
int max = left, min = left;
//遍历选出最大最小数
for (int i = left+1; i <= right; i++) {
if (a[max] > a[i]) {
max = i;
}
if (a[min] < a[i]) {
min = i;
}
}
swap(&a[left], &a[min]);
if (left == max)
max = min;
swap(&a[right], &a[max]);
left++;
right--;
}
}
1.4 关键特性
- 时间复杂度:O(n²)(双重循环)
- 空间复杂度:O(1)(原地排序)
- 不稳定性:交换可能破坏相等元素顺序(如
[5, 5, 2]
)
二、堆排序(Heap Sort)
堆排序在学习堆的时候学习过哦(´▽ʃ♡ƪ)
欢迎学习
【初探数据结构】详解三大经典排序算法(选择/堆/冒泡)
引言
排序算法是数据结构的核心基础。本文通过选择排序、堆排序、冒泡排序的对比解析,帮助初学者掌握算法思想与实现细节。文末附算法对比总结表。
一、选择排序(Selection Sort)
1.1 核心思想
“选最小的,放左边” 或 “选最大的,放右边” 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完
这里我们在序列两头同时进行选择排序,可以一定程度上提高选择排序的性能。
1.2 动态示意图
[示例数组:7, 3, 5, 1]
- 第1轮:找到最小值1 ↔ 与7交换 →
[1, 3, 5, 7]
- 第2轮:在剩余部分找最小3(已在正确位置)
- 第3轮:找最小5 ↔ 无需交换
- 排序完成
1.3 代码实现
代码语言:javascript代码运行次数:0运行复制void SelectSort(int* a, int n)
{
//定义左右指针
int left = 0;
int right = n - 1;
//当左右指针相遇,排序完成
while (left < right)
{
int max = left, min = left;
//遍历选出最大最小数
for (int i = left+1; i <= right; i++) {
if (a[max] > a[i]) {
max = i;
}
if (a[min] < a[i]) {
min = i;
}
}
swap(&a[left], &a[min]);
if (left == max)
max = min;
swap(&a[right], &a[max]);
left++;
right--;
}
}
1.4 关键特性
- 时间复杂度:O(n²)(双重循环)
- 空间复杂度:O(1)(原地排序)
- 不稳定性:交换可能破坏相等元素顺序(如
[5, 5, 2]
)
二、堆排序(Heap Sort)
堆排序在学习堆的时候学习过哦(´▽ʃ♡ƪ)
欢迎学习
本文标签: 初探数据结构详解三大经典排序算法(选择堆冒泡)
版权声明:本文标题:【初探数据结构】详解三大经典排序算法(选择堆冒泡) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/jiaocheng/1748067985a2248911.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论