推免複習之數據結構與算法 歸併排序

很早很早之前我也寫過歸併排序,所以我不再贅述,我之前寫的那篇文章還是挺清楚的,文章的鏈接在此https://blog.csdn.net/qq_38279908/article/details/82932943

寫的代碼好像和以前的那個沒什麼區別,代碼如下,當然你也可以參考我之前的代碼,都差不多:

#include<iostream>
#include<vector>
using namespace std;
 
void merge(vector<int> &arr, int left,int mid, int right, vector<int> &temp)  //合併
{
	int i = left, j = mid + 1;
	int k = 0;
	while (i<=mid && j<=right)
	{
		if (arr[i] < arr[j])
		{
			temp[k++] = arr[i++];
		}
		else
		{
			temp[k++] = arr[j++];
		}
	}

	while (i<=mid)
	{
		temp[k++] = arr[i++];
	}

	while (j<=right)
	{
		temp[k++] = arr[j++];
	}

	for (int i = 0; i < k; i++)
	{
		arr[left + i] = temp[i];
	}
}

void mergeSort(vector<int> &arr,int left,int right,vector<int> &temp)  //分治
{
	if (left < right)
	{
		int mid = (left + right) / 2;
		mergeSort(arr,left,mid,temp);
		mergeSort(arr, mid+1, right, temp);
		merge(arr,left,mid,right,temp);
	}
}

int main()
{
	vector<int> Input = {1,9,7,8,3,6,5,4,3,2,7,45,32,1,4,75,20,31,74,36,16,28,37,44};
	int size = Input.size();
	vector<int> temp(size);
	mergeSort(Input,0,size-1, temp);
	for (int i = 0; i < size; i++)
	{
		cout << Input[i] << "  ";
	}
	system("pause");
	return 0;
}

 

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