c语言实现归并算法,c语言的递归算法

本文目录一览:

c语言的归并排序的完整程序

这个不难:

#includestdio.h

// 一个递归函数

void mergesort(int *num,int start,int end);

// 这个函数用来将两个排好序的数组进行合并

void merge(int *num,int start,int middle,int end);

int main()

{

// 测试数组

int num[10]= {12,54,23,67,86,45,97,32,14,65};

int i;

// 排序之前

printf(“Before sorting:\n”);

for (i=0; i10; i++)

{

printf(“%3d”,num[i]);

}

printf(“\n”);

// 进行合并排序

mergesort(num,0,9);

printf(“After sorting:\n”);

// 排序之后

for (i=0; i10; i++)

{

printf(“%3d”,num[i]);

}

printf(“\n”);

return 0;

}

//这个函数用来将问题细分

void mergesort(int *num,int start,int end)

{

int middle;

if(startend)

{

middle=(start+end)/2;

// 归并的基本思想

// 排左边

mergesort(num,start,middle);

// 排右边

mergesort(num,middle+1,end);

// 合并

merge(num,start,middle,end);

}

}

//这个函数用于将两个已排好序的子序列合并

void merge(int *num,int start,int middle,int end)

{

int n1=middle-start+1;

int n2=end-middle;

// 动态分配内存,声明两个数组容纳左右两边的数组

int *L=new int[n1+1];

int *R=new int[n2+1];

int i,j=0,k;

//将新建的两个数组赋值

for (i=0; in1; i++)

{

*(L+i)=*(num+start+i);

}

// 哨兵元素

*(L+n1)=1000000;

for (i=0; in2; i++)

{

*(R+i)=*(num+middle+i+1);

}

*(R+n2)=1000000;

i=0;

// 进行合并

for (k=start; k=end; k++)

{

if(L[i]=R[j])

{

num[k]=L[i];

i++;

}

else

{

num[k]=R[j];

j++;

}

}

delete [] L;

delete [] R;

}

C语言的归并算法?

输入参数中,需要排序的数组为array[],起始索引为first,终止索引为last。调用完成后,array[]中从first到last处于升序排列。

void MergeSort(int array[], int first, int last)

{

int mid = 0;

if(firstlast)

{

mid = (first+last)/2;

MergeSort(array, first, mid);

MergeSort(array, mid+1,last);

Merge(array,first,mid,last);

}

}

高分送!!如何用C语言实现归并排序算法!!!

#include iostream

using namespace std;

void merge(int array[],int left,int right)

{

int temparray[right];

for(int j=left;j=right;j++)

{

temparray[j]=array[j];

}

int middle=(left+right)/2;

int index1=left;

int index2=middle+1;

int i=left;

while((index1=middle)(index2=right))

{

if(temparray[index1]temparray[index2]) array[i++]=temparray[index1++];

else array[i++]=temparray[index2++];

}

while(index1=middle) array[i++]=temparray[index1++];

while(index2=right) array[i++]=temparray[index2++];

}

void sort(int array[],int left,int right)

{

if(leftright)

{

int middle=(left+right)/2;

sort(array,left,middle);

sort(array,middle+1,right);

merge(array,left,right);

}

}

这个不是特别的完美,但是大体上就是这么个思路啦~而且因为语法不严谨,貌似只能在c++下运行~建议看看youku上的数据结构课,然后你就会发现全明白了~

如果在c语言下运行,int temparray[right];这句话里面的right要改成你需要用的数~

如何用C语言编一个归并排序的程序

#include “MergeSort.h”

#include iostream

using namespace std;

MergeSort::MergeSort(vectorint _list, int _len)

{

list.push_back(0);

link.push_back(0);

for (int i=0; i_len; i++) {

list.push_back(_list[i]);

link.push_back(0);

}

this-len = _len;

}

//9 归并排序:递归———————————————————–

//具体方法:以merger_link[]提供链表功能。merger_link[i]对应在有序子序列中

//merger_list[i]后一个结点在原merger_list[]中的下标;

//merger_link[0]总是表示有序子序列开始的结点在merge_list[]中的下标;

//st1,st2为两个有序序列的第一个结点;

//将他们归并,并返回其第一个结点的下标,即merger_link[0]

int MergeSort::list_merge(int st1, int st2)

{

int k = 0, i = st1, j = st2;

while (i j) //当两序列未检测完

if (list[i] = list[j]) //将merge_list[i]和merge_list[j]

{ //中小的连接到merger_link[k]后

link[k] = i;

k = i;

i = link[i];

}else

{

link[k] = j;

k = j;

j = link[j];

}

if (!i) link[k] = j; //将剩余未检测完的merge_list[]

else link[k] = i; //连接到merger_link[k]后

return link[0];

}

int MergeSort::merge_sort(int left, int right)

{

if (left=right) return left;

int middle = (left + right)/2;

//对左右两子序列进行归并

return list_merge(merge_sort(left,middle), merge_sort(middle+1,right));

}

void MergeSort::out()

{

int i = link[0];

int j = 0;

while (i)

{

j++;

cout list[i] ” “;

i = link[i];

if (j%18 == 0) cout endl;

}

cout endl;

}

原创文章,作者:QAJLN,如若转载,请注明出处:https://www.506064.com/n/313356.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
QAJLNQAJLN
上一篇 2025-01-07 09:43
下一篇 2025-01-07 09:43

相关推荐

  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29
  • Python实现爬楼梯算法

    本文介绍使用Python实现爬楼梯算法,该算法用于计算一个人爬n级楼梯有多少种不同的方法。 有一楼梯,小明可以一次走一步、两步或三步。请问小明爬上第 n 级楼梯有多少种不同的爬楼梯…

    编程 2025-04-29
  • AES加密解密算法的C语言实现

    AES(Advanced Encryption Standard)是一种对称加密算法,可用于对数据进行加密和解密。在本篇文章中,我们将介绍C语言中如何实现AES算法,并对实现过程进…

    编程 2025-04-29
  • 学习Python对学习C语言有帮助吗?

    Python和C语言是两种非常受欢迎的编程语言,在程序开发中都扮演着非常重要的角色。那么,学习Python对学习C语言有帮助吗?答案是肯定的。在本文中,我们将从多个角度探讨Pyth…

    编程 2025-04-29
  • Harris角点检测算法原理与实现

    本文将从多个方面对Harris角点检测算法进行详细的阐述,包括算法原理、实现步骤、代码实现等。 一、Harris角点检测算法原理 Harris角点检测算法是一种经典的计算机视觉算法…

    编程 2025-04-29
  • 数据结构与算法基础青岛大学PPT解析

    本文将从多个方面对数据结构与算法基础青岛大学PPT进行详细的阐述,包括数据类型、集合类型、排序算法、字符串匹配和动态规划等内容。通过对这些内容的解析,读者可以更好地了解数据结构与算…

    编程 2025-04-29
  • Python被称为胶水语言

    Python作为一种跨平台的解释性高级语言,最大的特点是被称为”胶水语言”。 一、简单易学 Python的语法简单易学,更加人性化,这使得它成为了初学者的入…

    编程 2025-04-29
  • 瘦脸算法 Python 原理与实现

    本文将从多个方面详细阐述瘦脸算法 Python 实现的原理和方法,包括该算法的意义、流程、代码实现、优化等内容。 一、算法意义 随着科技的发展,瘦脸算法已经成为了人们修图中不可缺少…

    编程 2025-04-29
  • OpenJudge答案1.6的C语言实现

    本文将从多个方面详细阐述OpenJudge答案1.6在C语言中的实现方法,帮助初学者更好地学习和理解。 一、需求概述 OpenJudge答案1.6的要求是,输入两个整数a和b,输出…

    编程 2025-04-29
  • Python按位运算符和C语言

    本文将从多个方面详细阐述Python按位运算符和C语言的相关内容,并给出相应的代码示例。 一、概述 Python是一种动态的、面向对象的编程语言,其按位运算符是用于按位操作的运算符…

    编程 2025-04-29

发表回复

登录后才能评论