Algorithm-Renewed
This commit is contained in:
54
Algorithm/Divide&Conquer/MergeSort.cpp
Normal file
54
Algorithm/Divide&Conquer/MergeSort.cpp
Normal file
@@ -0,0 +1,54 @@
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
using namespace std;
|
||||
|
||||
void mergeSort(vector<int>& path, int start, int end){
|
||||
if(start >= end) return;
|
||||
|
||||
int mid = (end + start) / 2;
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ݹ<EFBFBD><DDB9>ֽ<EFBFBD>
|
||||
mergeSort(path, start, mid);
|
||||
mergeSort(path, mid + 1, end);
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
|
||||
vector<int> temp;
|
||||
int i = start, j = mid + 1;
|
||||
|
||||
while(i <= mid && j <= end){
|
||||
if(path[i] >= path[j]){
|
||||
temp.push_back(path[j]);
|
||||
j++;
|
||||
}
|
||||
else{
|
||||
temp.push_back(path[i]);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
while(i <= mid) temp.push_back(path[i++]);
|
||||
while(j <= end) temp.push_back(path[j++]);
|
||||
|
||||
//ֱ<>Ӱѵ<D3B0><D1B5><EFBFBD><EFBFBD>õĿ<C3B5><C4BF><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD>鼴<EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD>
|
||||
for(int x = 0; x < temp.size(); x++){
|
||||
path[start + x] = temp[x];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
int main(){
|
||||
vector<int> arr;
|
||||
int n;
|
||||
cin >> n;
|
||||
arr.resize(n);
|
||||
for(int i = 0; i < n; i++){
|
||||
cin >> arr[i];
|
||||
}
|
||||
mergeSort(arr, 0, arr.size() - 1);
|
||||
for(int i = 0; i < arr.size(); i++){
|
||||
if(i) cout << " ";
|
||||
cout << arr[i];
|
||||
}
|
||||
cout << endl;
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user