【基本排序算法】五、归并排序

归并排序简单介绍

1、概念
归并排序(英语:Merge sort,或mergesort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
2.实现思想
归并排序的核心思想是将两个有序的数列合并成一个大的有序的序列。通过递归,层层合并,即为归并。
③动图演示:在这里插入图片描述

算法实现

void merge(int data[], int lt, int mid, int rt)
{
	int len = rt - lt + 1;
	//开辟一个新的数组,将原数组映射进去 
	int *temp = new int[len];
	for (int m = lt; m <= rt; m++)
	{
		temp[m - lt] = data[m];
	}
	int i = lt, j = mid + 1;//i和j分别指向两个子数组开头部分
	for (int k = lt; k <= rt; k++)
	{
		if (i > mid)
		{
			data[k] = temp[j - lt];
			j++;
		}
		else if (j > rt)
		{
			data[k] = temp[i - lt];
			i++;
		}
		else if (temp[i - lt] < temp[j - lt])
		{
			data[k] = temp[i - lt];
			i++;
		}
		else
		{
			data[k] = temp[j - lt];
			j++;
		}
	}
	delete[] temp;
}
//递归的使用归并排序,对data[l....r]排序 
void merge_sort(int data[], int l, int r)
{
	if (l >= r)
		return;
	int mid = (l + r) / 2;
	merge_sort(data, l, mid);
	merge_sort(data, mid + 1, r);
	merge(data, l, mid, r);
}

参考资料
https://www.toutiao.com/a6593273307280179715/?iid=6593273307280179715

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章