⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mergesort.h

📁 快速排序、合并排序、插入排序、堆排序、计数排序等算法的C语言实现
💻 H
字号:
#include<stdio.h>
#include<limits.h>
#include<malloc.h>
#define TRUE 1
#define FALSE 0

#define MaxValue UINT_MAX//UINT_MAX为最大无符号整数

typedef int ElemType;

//合并排序头文件
void Merge(ElemType A[],long p,long q,long r)
//数组A[p--q]和数组A[q+1--r]经合并后存放于数组A中
{
	long n1 = q - p + 1;
	long n2 = r - q;
	LinkList temp1,temp2,p1,p2;
	long i,j,k;
	temp1=InitList_L();
	temp2=InitList_L();
	for(i = 0;i < n1;i++)
		ListInsert_L(temp1,i+1,A[p+i]);
	for(j = 0;j < n2;j++)
		ListInsert_L(temp2,j+1,A[q+1+j]);
	ListInsert_L(temp1,n1+1,MaxValue);
	ListInsert_L(temp2,n2+1,MaxValue);
	p1=temp1->next;
	p2=temp2->next;
	for(k = p;k <= r;k++)
	{
		if(p1->data <= p2->data)
		{
			A[k] = p1->data;
			p1=p1->next;
		}
		else
		{
			A[k] = p2->data;
			p2=p2->next;
		}
	}
	DestroyList_L(temp1);
	DestroyList_L(temp2);
	free(p1);
	free(p2);
}
void MergeSort(ElemType A[],long p,long r)
{//合并排序算法,时间复杂度为O(n*lgn)
	long q;
	if(p < r)
	{
		q = (p + r)/2;
		MergeSort(A,p,q);
		MergeSort(A,q+1,r);
		Merge(A,p,q,r);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -