1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | include "stdafx.h" #include <iostream> #include <map> #include <unordered_set> #include <string> #include <algorithm> using namespace std; void mergesortrec(vector<int> * data, int low, int high) { // base case : if one left, return without any work if (low == high) { return; } // starting from length 2 ; split with 0 and 1 , int mid = (low + high) / 2; mergesortrec(data, low, mid); mergesortrec(data, mid + 1, high); vector<int> buf; buf.reserve(high - low + 1); int highit = mid + 1; int lowit = low; for (int i = low; i <= high; i++) { if (lowit <= mid && highit <= high) { if (data->at(highit) > data->at(lowit)) { buf.push_back(data->at(lowit)); lowit++; } else { buf.push_back(data->at(highit)); highit++; } }else if (highit == high + 1) { buf.push_back(data->at(lowit)); lowit++; }else if (lowit == mid + 1) { buf.push_back(data->at(highit)); highit++; } } for (int i = low; i <= high; i++) { data->at(i) = buf.at(i - low); } } void mergesort(vector<int> * data) { mergesortrec(data, 0, data->size() - 1); } int main() { vector<int> v1 = { 5,3,1,9,10,4,2,8,8,7,6 }; mergesort(&v1); for (int i : v1) { cout << i << " "; } while(1){} return 0; } //--- void quicksortrec(vector<int> * v1, int low, int high) { if (low == high) { return; } vector<int> buf; buf.reserve(high - low); int pivot = v1->at(high - 1); buf.push_back(pivot); int count = 0; for (int i = low; i < high - 1; i++) { if (pivot < v1->at(i)) { buf.push_back(v1->at(i)); } else { buf.insert(buf.begin(), v1->at(i)); count++; } } for (int i = low; i < high; i++) { v1->at(i) = buf.at(i - low); } quicksortrec(v1, low, low+count); quicksortrec(v1, low+count + 1, high); } void quicksort(vector<int> * v1) { return quicksortrec(v1,0,v1->size()); } int main1212() { vector<int> v1 = { 3,1,4,10,3,13,9,8,7 }; quicksort(&v1); for (int i : v1) { cout << i << " "; } while(1){} return 0; } | cs |