Merge sort of sorting algorithm [C++]

 Diagram (from the Internet)

 

A video explaining merge sorting by other big guys

 Detailed code

#include<iostream>
#include<vector>
using namespace std;

void Merge_sort(vector<int>&array, vector<int>&tempArray, int left, int right);
void merge(vector<int>&array, vector<int>&tempArray, int left, int mid, int right);
void Arr_print(vector<int>arr);
//归并的入口函数
void Merge_sort(vector<int>&array, vector<int>&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<int>&array, vector<int>&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(vector<int>arr)
{
	for (auto a : arr)
		cout << a;
	cout << endl;
}
int main()
{
	vector<int>arr = { 8,7,6,5,4,3,2,1};
	cout << "原数组为:" << endl;;
	Arr_print(arr);
	cout << "开始归并" << endl;
	vector<int>tempArr;
	tempArr.resize(arr.size());
	int start_index = 0;
	int end_index = arr.size() - 1;
	Merge_sort(arr, tempArr, start_index, end_index);
}

 output as

The original array is:
87654321
start merging
78654321
78564321
56784321
56783421
56783412
56781234
12345678

Guess you like

Origin blog.csdn.net/m0_52910424/article/details/124993548