#include<iostream>
#include<vector>
#include<string>
#include<set>
#include<map>
#include<unordered_set>
#include<unordered_map>
#include<algorithm>
#include<xfunctional>
using namespace std;
void Merge(vector<int>& arr, int start, int mid, int end){
vector<int> left;
vector<int> right;
for (int i = start; i <=mid; i++) left.push_back(arr[i]);
for (int i = mid+1 ; i <=end; i++) right.push_back(arr[i]);
int index = start;
int i = 0;
int j = 0;
while (i < left.size() && j < right.size()){
if (left[i] >= right[j]){
arr[index] = right[j];
j++;
}
else{
arr[index] = left[i];
i++;
}
index++;
}
while (i <left.size()){
arr[index] = left[i];
i++;
index++;
}
while (j <right.size()){
arr[index] = right[j];
j++;
index++;
}
}
void MergeSort(vector<int>& arr, int start, int end){
if (start >= end) return;
int mid = (start + end) / 2;
MergeSort(arr, start, mid);
MergeSort(arr, mid+1, end);
Merge(arr, start, mid, end);
}
int GetSum(vector<int>& arr,int sum){
int i = 0;
int j = arr.size() - 1;
while (i < j){
if (arr[i] + arr[j] == sum) return 1;
else if (arr[i] + arr[j] < sum) i++;
else j--;
}
return -1;
}
int main(){
int n;
cout << "Input the size(>=1) of the array:";
cin >> n;
vector<int> arr(n,0);
cout << "Input the array element:";
for (int i = 0; i < n; i++) cin >> arr[i];
MergeSort(arr,0,arr.size()-1);
cout << "After sort:";
for (int i = 0; i < arr.size(); i++) cout << arr[i] << " ";
cout << endl;
cout << "The sum that you want to find:";
int sum;
cin >> sum;
int res = GetSum(arr,sum);
if (res == 1) cout << "True";
else cout << "false";
cout << endl;
system("pause");
return 0;
}
算法导论(Exercise 2.3-7)
最新推荐文章于 2019-03-13 16:58:45 发布