栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

排序算法之归并排序【C++】

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

排序算法之归并排序【C++】

 图解(来源于网络)

 

别的大佬的一个讲解归并排序的视频

 代码详解

#include
#include
using namespace std;

void Merge_sort(vector&array, vector&tempArray, int left, int right);
void merge(vector&array, vector&tempArray, int left, int mid, int right);
void Arr_print(vectorarr);
//归并的入口函数
void Merge_sort(vector&array, vector&tempArray, int left, int right) {
	int mid = (left + right) / 2;	//获得中间元素的下标,将数组一分为二
	if (left < right)
	{
		Merge_sort(array, tempArray, left, mid);		//左半部分数组一分为二
		Merge_sort(array, tempArray, mid+1, right);		//右半部分数组一分为二
		merge(array, tempArray, left, mid, right);	//将上面一分为二的部分归并排序
		Arr_print(array);
	}
}
void merge(vector&array, vector&tempArray, int left, int mid, int right)
{
	//左边区域第一个没有排序的元素下标
	int l_index = left;
	//右边区域第一个没有排序的元素下标
	int r_index = mid + 1;
	//临时数组开始的元素下标
	int temp_index = left;
	//复制时候的开始下标
	int copy_index = left;
	//开始合并
	while (l_index <= mid && r_index <= right) {
		// 比较两段元素中头元素的大小,取最小的元素放入临时数组中
		if (array[l_index] < array[r_index])
			tempArray[temp_index++] = array[l_index++];
		else
			tempArray[temp_index++] = array[r_index++];
	}
		//若左半边元素有剩余
		while(l_index<=mid)
			tempArray[temp_index++] = array[l_index++];

		//若右半边元素有剩余
		while(r_index<=right)
			tempArray[temp_index++] = array[r_index++];

		//将临时数组中的数据,此时已经排好顺序,拷贝到原数组中
		while (copy_index <= right) {
			array[copy_index] = tempArray[copy_index];
			copy_index++;
		}

}
//打印数组函数
void Arr_print(vectorarr)
{
	for (auto a : arr)
		cout << a;
	cout << endl;
}
int main()
{
	vectorarr = { 8,7,6,5,4,3,2,1};
	cout << "原数组为:" << endl;;
	Arr_print(arr);
	cout << "开始归并" << endl;
	vectortempArr;
	tempArr.resize(arr.size());
	int start_index = 0;
	int end_index = arr.size() - 1;
	Merge_sort(arr, tempArr, start_index, end_index);
}

 输出为

原数组为:
87654321
开始归并
78654321
78564321
56784321
56783421
56783412
56781234
12345678

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/931435.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号