笔记: 排序算法——合并排序(C++实现)

本文介绍了合并排序算法,它是一种基于分治法的排序算法,时间复杂度为Θ(nlgn)。文章通过举例展示了如何对数组进行合并排序,并提供了C++的实现代码。此外,作者提到了在LeetCode上遇到的空间消耗问题,欢迎读者提供反馈和帮助。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 合并排序(归并排序)介绍
    简单介绍:是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。(来自百度百科)
    时间复杂度:最坏情形、最好情形、平均时间复杂度都是: Θ ( n l g n ) \Theta(nlg n) Θ(nlgn)
    空间复杂度 T ( n ) T(n) T(n)
    举个例子:给数组 A = { 3 , 5 , 1 , 6 , 9 , 2 } A = \{3, 5, 1, 6, 9, 2\} A={ 3,5,1,6,9,2}排序
    合并过程举例
  2. 合并排序流程
    Merge sort A{1, 2, …, n}
    (1) if n=1, done
    (2)对A{1, 2, …, [n/2]}和 A{[n/2]+1, …, n]排序(使用递归即可)
    (3) merge 2 sorted lists.
  3. C++实现
#include <iostream>
using namespace std;

#define infty 0x7fff;   //定义无穷大

/**
合并排序  2020.04.15
Author: 豆奶
Reference:1. 算法导论第3版
 2. 麻省理工公开课:算法导论
 **/

/**
定义插入排序,具体可见另一篇文章.
**/
void insert_sort(int A[], int length){
   
	for(int j=1; j<length; j++){
   
		int key = A[j];
		int i = j-1;
		while(i>=0 && A[i]>key){
   
			A[i+1] = A[i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值