《算法导论》笔记:第2章 思考题2-4 求逆序对(代码)

本文记录了《算法导论》第二章的一个思考题,即如何在最坏情况下以Θ(nlgn)的时间复杂度求解数组中的逆序对数量。文中给出了使用合并排序算法的C语言实现,尽管未经优化,但能够阐述问题的解决思路。
摘要由CSDN通过智能技术生成

逆序对的定义:设A[1…n]是一个包含n个不同数的数组。如果在i<j的情况下,有A[i]>A[j],则(i,j)就称为A中的一个逆序对(inversion)。

要求给出一个算法,它能用Θ(nlgn)的最坏情况运行时间,确定n个元素的任何排列中逆序对的数目。


下面是c代码实现,采用合并排序算法。此代码尚未经过优化,仅供参考。


inversion.h

/*
 * Caculate the number of inversions in the array
 * 求数组中的逆序对的个数
 */

#ifndef _FENGHOU_INVERSION_H_
#define _FENGHOU_INVERSION_H_

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>


long calc_inversion(int * array, int length);

#endif /* _FENGHOU_INVERSION_H_ */


inversion.c

#include "inversion.h"

#include <string.h>


int * _calc_inversion_merge_sort(int * array, int length, long * inversion);
int * _calc_inversion_merge(int * array_left, int length_left, int * array_right, int length_right, long * inversion);
void _calc_inversion_print_
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值