归并排序

  归并排序与快速排序的思想基本一致,唯一不同的是归并排序的基准值是数组的中间元素。
  关于快速排序的思想
在这里插入图片描述
代码:

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

void Print(int *arr,int size);
//归并
void Merge_sort(int *arr, int left, int right, int*temp);

void merge(int *arr, int *temp, int left, int mid, int right)
{
	int begin1 = left;
	int end1 = mid;
	int begin2 = mid+1;
	int end2 = right;
	int index = left;
	while (begin1 <= end1&&begin2 <= end2)
	{
		if (arr[begin1] <= arr[begin2])
		{
			temp[index] = arr[begin1];
			index++;
			begin1++;
		}
		else
		{
			temp[index] = arr[begin2];
			index++;
			begin2++;
		}
	}
	while (begin1 <= end1)
	{
		temp[index++] = arr[begin1++];
	}
	while (begin2 <= end2)
	{
		temp[index++] = arr[begin2++];
	}

}
void Merge_sort(int *arr, int left, int right,int*temp)
{

	if (right - left < 2)
	{
		InsertSort(arr + left, right - left+1);
		return;
	}
	int mid = left + ((right - left) >> 1);
	
	Merge_sort(arr, left, mid, temp);
	Merge_sort(arr, mid+1, right, temp);
	merge(arr,temp,left,mid,right);
	memcpy(arr, temp, 10*sizeof(int));
}

测试:

#include"quickSort.h"
void TestquickSort()
{
	int array[] = {2,5,4,9,3,6,8,7,1,0};
	int *temp = (int *)malloc(sizeof(array) / sizeof(array[0])*sizeof(int));
	if (temp == NULL)
	{
		return;
	}
	//打印
	printf("排序前: ");
	Print(array, sizeof(array) / sizeof(array[0]));
	memcpy(temp, array, sizeof(array) / sizeof(array[0])*sizeof(int));

	Merge_sort(array, 0, sizeof(array) / sizeof(array[0])-1, temp);

	printf("排序后: ");
	Print(array, sizeof(array) / sizeof(array[0]));

}
int main()
{
	TestquickSort();
	system("pause");
	return 0;
}

在这里插入图片描述
时间复杂度: o(NlogN)
空间复杂度: o(n)
稳定性: 稳定
适用场景: 适用于外部排序。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值