c语言mergesort 参数,归并排序C语言兑现MergeSort

归并排序C语言实现MergeSort

是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide

and Conquer)的一个非常典型的应用。

算法伪码:

MERGE-SORT(A,p, r)

if  p < r

then q = (p + r) / 2

MERGE-SORT(A,p, q)

MERGE-SORT(A,q+1, r)

MERGE(A,p, q, r)

下面的程序中,假设A是数组,p,r 都是整数。当然可以根据问题的实际情况加以改变。

Merge函数功能主要是将两个有序的数组合并成一个,用时为线性时间。

整个归并排序的时间复杂度为nlog(n)。#include

#include

#include

#define MAX 0x11111111

void Merge(int* A, int p, int q, int r)

{

int n1 = q - p + 1;

int n2 = r - q;

assert(n1 >= 0 && n2 >= 0);

int* ltmp = malloc(sizeof(int) * (n1 + 1));

int* rtmp = malloc(sizeof(int) * (n2 + 1));

int i, j, k;

for(i = p, j = 0; i <= q; i++, j++)

{

ltmp[j] = A[i];

}

for(i = q+1, j = 0; i <= r; i++, j++)

{

rtmp[j] = A[i];

}

ltmp[n1] = MAX;

rtmp[n2] = MAX;

for(i = 0, j = 0, k = p; k <= r; k++)

{

if(ltmp[i] <= rtmp[j])

{

A[k] = ltmp[i];

i++;

}

else

{

A[k] = rtmp[j];

j++;

}

}

}

void MergeSort(int* A, int p, int r)

{

assert(A);

if(r > p)

{

int q = (p + r) / 2;

MergeSort(A, p, q);

MergeSort(A, q + 1, r);

Merge(A, p, q, r);

}

}

int main()

{

int A[10] = {9, 8, 7, 4, 3, 5, 6, 1, 2, 0};

int k;

MergeSort(A, 0, 9);

for(k = 0; k < 10; k++)

{

printf("%d\n", A[k]);

}

return 0;

}

参考:《算法导论》Thomas H.Cormen等著。

wiki :http://zh.wikipedia.org/wiki/%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/422004.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF中打印问题的探讨[转]

转自&#xff1a;http://blog.sina.com.cn/s/blog_624dc0120100ld6m.html 最近在做一个WPF方面的项目&#xff0c;在打印功能实现上费了很大劲。因为我原来是在做Winform方面的项目&#xff0c;接受WPF时感觉还很相似&#xff0c;可仔细往里做下去却发现两者外看相似&#xff0…

语法分析树(先看例子再看定义)

语法分析树&#xff08;先看例子再看定义&#xff09; 先讲例子 书上讲问题&#xff0c;先讲定义&#xff0c;一顿学术操作&#xff0c;让人云里雾里&#xff0c;然后出例子。其实这样往往让人觉得看书的过程就是放弃的过程。 关于语法分析树&#xff0c;我先从上篇文章的例…

C语言正函数nosign,C语言标准库函数查询手册.docx

球锣宜软瘠旱塾3abort功能异常终止程序头文件StdIib.h语法VOid abort(void);abs功能整数的绝对值头文件StdIib.h语法int abs(int: j);返回值整数j的绝对值。如果不能表示J的绝对值&#xff0c;那么函数的行为是未定义的。absread功能读磁盘绝对扇区函数头文件dos ? h语法int a…

spring 实例化bean的几种方法

1.普通的通过构造函数初始化&#xff0c;没有指定构造函数参数的就是用默认的无参的构造方法 <bean id"exampleBean" class"examples.ExampleBean"/><bean name"anotherExample" class"examples.ExampleBeanTwo"/> 构造函…

middle函数C语言,C语言函数调用栈(三)

6 调用栈实例分析本节通过代码实例分析函数调用过程中栈帧的布局、形成和消亡。6.1 栈帧的布局示例代码如下&#xff1a;//StackReg.c#include //获取函数运行时寄存器%ebp和%esp的值#define FETCH_SREG(_ebp, _esp) do{\asm volatile( \"movl %%ebp, %0 \n" \"…

c语言多个形参,C中子函数最多有几个形参

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼C89 31个&#xff0c;C99 127个。ANSI C892.2.4.1 Translation limitsThe implementation shall be able to translate and execute at least one program that contains at least one instance of every one of the following lim…

什么叫ERP软件

1.ERP是什么&#xff1f; erp是个管理系统&#xff01;是一个成套的统称&#xff01;构成&#xff1a;进销存BOM生产MRP质检(IQC/FQC/PQC)车间日报/简单排产应收应付固定资产实际成本算法自动财务。就是通过软件管理&#xff0c;实现最小的库存和最大的利益&#xff01; 2.什么…

android 杀 服务器,android busybox httpd搭建简单web服务器

安卓手机利用busybox中的httpd命令可以创建一个简单的web服务器。我们可以在终端模拟器中输入一下命令查看httpd的使用帮助。busybox httpd --help1|u0_a84cancro:/ $ busybox httpd --helpBusyBox v1.20.2-MIUI (2012-08-20 20:59:32 CST) multi-call binary.Usage: httpd [-i…

sublimeclang里面使用相对路径

在sublime的project里面&#xff0c;可以添加sublimeclang的options,比如这样 {"folders":[{"path": "/C/EverBox/gitCode/clangxx"}],"settings": {"sublimeclang_options": ["-Wall","-IC:\\EverBox\\gitC…

短信恢复 android,苹果手机短信恢复:安卓+苹果手机短信恢复教程,必须收藏!...

原标题&#xff1a;苹果手机短信恢复&#xff1a;安卓苹果手机短信恢复教程&#xff0c;必须收藏&#xff01;手机短信怎么恢复&#xff1f;日常生活中&#xff0c;大家或多或少会不小心把删除一些不必要的短信&#xff0c;比如注册某软件的验证码的短信&#xff0c;面试通知地…

Shell应用:批量将文件编码由gbk转utf-8

Shell应用&#xff1a;批量将文件编码由gbk转utf-8,实例代码&#xff1a; [plain]#!/bin/bash // batch_change_GB2312_to_UTF-8 cd directory find ./ -type f -name "*.java" | while read line;do echo $line iconv -f GB2312 -t UTF-8 $line > ${lin…

c语言立体图像编程,C语言-编程实例-三视图的画法

#includeint dx[12]{0,60,60,0,0,60,60,0,60,0,60,0}; /*确定组合体X坐标*/int dy[12]{0,0,120,120,0,0,40,40,80,80,120,120};/*确定组合体Y坐标*/int dz[12]{0,0,0,0,80,80,80,80,40,40,40,40};/*确定组合体Z坐标*/int ld[24]{0,1,2,3,0,4,5,6,7,4,10,11,9,8,10,2,3,11,8,6,9…

【js拾遗】名称空间

function NameSpace(ns) {if (!ns) {return null;}var arr ns.split(.);//第一次调用的时候window.utry的值为{};//第二次调用的时候window.utry的值为window.utry;window[arr[0]] window[arr[0]] || {};//obj是window.utry的引用var obj window[arr[0]];//result也是window…

Linux编程简介——VI

VI是Linux/Unix下标配的一个纯字符界面的文本编辑器。由于不支持鼠标功能&#xff0c;也没有图形界面&#xff0c;相关的操作都要通过键盘指令来完成&#xff0c;需要记忆大量命令。因此很多人不大喜欢它&#xff0c;但同时由于键盘的方式往往比鼠标来得快&#xff0c;一旦熟练…

xamarin android 标签,安卓端Tabbedpage调整在底部位置和标签及取消Android API28 以下的点击特效—-xamarin.forms学习笔记(一)...

使用tabbedpage时将安卓端导航放在底部,官网也有说明方法.总结:xmlns"http://xamarin.com/schemas/2014/forms"xmlns:x"http://schemas.microsoft.com/winfx/2009/xaml"xmlns:local"clr-namespace:aya"x:Class"aya.MainPage"xmlns:and…

算法之递推及其应用(递推关系的建立及在信息学竞赛中的应用 安徽 高寒蕊)...

定义&#xff1a;给定一个数的序列H0,H1,…,Hn,…若存在整数n0&#xff0c;使当nn0时,可以用等号(或大于号、小于号)将Hn与其前面的某些项Hn(0i<n)联系起来&#xff0c;这样的式子就叫做递推关系。 递推关系中存在着三大基本问题&#xff1a;如何建立递推关系&#xff0c;已…

android广播第三方库,Android Support 库:LocalBroadcastManager

在介绍完 Android Support 库发展历程(http://blog.chengyunfeng.com/?p1047)后&#xff0c; 再分别介绍下 Android Support 库中有用但是被忽略的一些功能。了解这些功能&#xff0c;在需要的时候可以避免在引入其他类似的第三方库或者避免自己重复制造轮子&#xff0c;提高开…