很早很早之前我也寫過歸併排序,所以我不再贅述,我之前寫的那篇文章還是挺清楚的,文章的鏈接在此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;
}