目录
引言:
在数据结构和算法中,排序算法是一个基础而重要的主题。在前两篇博客中,我们已经介绍了冒泡排序、插入排序和选择排序这几种简单但效率较低的排序算法。本篇博客将重点介绍归并排序和快速排序这两种高效的排序算法。这两种算法在实际应用中被广泛采用,它们的思想与实现都具有一定的难度和挑战,因此有必要对它们进行深入了解。
一、归并排序
归并排序是一种分治法(Divide and Conquer)的典型应用,它的基本思想是将待排序的序列不断地分割成更小的子序列,直到子序列长度为1,然后将这些子序列按照规则合并,最终得到一个有序的序列。下面是归并排序的详细步骤:
- 将待排序序列分成两个大致相等的子序列。
- 递归地对这两个子序列进行归并排序。
- 将两个已排序的子序列合并成一个有序序列。
代码实现:
#include <iostream>
#include <vector>
using namespace std;
// 归并两个有序子序列
void merge(vector<int>& arr, int left, int mid, int right) {
int n1 = mid - left + 1;
int n2 = right - mid;
vector<int> L(n1), R(n2);