diff options
author | Derick Huth <derickhuth@gmail.com> | 2015-09-24 12:22:41 -0600 |
---|---|---|
committer | Derick Huth <derickhuth@gmail.com> | 2015-09-24 12:22:41 -0600 |
commit | 4631ad76927d433da5d55c3c373a1dfd0f74c9d4 (patch) | |
tree | f8dcba88576ec95e403f0c14efd80e970f30a260 /test-chill/unit-tests/cprog/MergeSorter.cc | |
parent | 6eb2b89896da66a77d0dcdf2d72b98c122826949 (diff) | |
parent | 0cff3f9a3c4ccd434900162ebef4bd814850f481 (diff) | |
download | chill-4631ad76927d433da5d55c3c373a1dfd0f74c9d4.tar.gz chill-4631ad76927d433da5d55c3c373a1dfd0f74c9d4.tar.bz2 chill-4631ad76927d433da5d55c3c373a1dfd0f74c9d4.zip |
Merge pull request #7 from dhuth/master
V0.2.1
Diffstat (limited to 'test-chill/unit-tests/cprog/MergeSorter.cc')
-rw-r--r-- | test-chill/unit-tests/cprog/MergeSorter.cc | 77 |
1 files changed, 0 insertions, 77 deletions
diff --git a/test-chill/unit-tests/cprog/MergeSorter.cc b/test-chill/unit-tests/cprog/MergeSorter.cc deleted file mode 100644 index 6e747a3..0000000 --- a/test-chill/unit-tests/cprog/MergeSorter.cc +++ /dev/null @@ -1,77 +0,0 @@ -#include "MergeSorter.h" - -/* Python -def msort(lst, start, end, pindent = 0): - if start == end: - return - center = start + ((end - start) // 2) - print(' '*pindent + "SPLIT {}|{}".format(lst[start:center+1], lst[center+1:end+1])) - msort(lst, start, center, pindent+1) - msort(lst, center+1, end, pindent+1) - left = list(lst[start:center+1]) - right = list(lst[center+1:end+1]) - print(' '*pindent + "MERGE {}|{}".format(lst[start:center+1], lst[center+1:end+1])) - i,j = 0, 0 - for k in range(start, end+1): - if i >= len(left): - lst[k] = right[j] - j += 1 - print(' '*(pindent+1) + 'pull j: {} {} {}'.format(lst[start:k+1], left[i:], right[j:])) - elif j >= len(right): - lst[k] = left[i] - i += 1 - print(' '*(pindent+1) + 'pull i: {} {} {}'.format(lst[start:k+1], left[i:], right[j:])) - elif left[i] > right[j]: - lst[k] = right[j] - j += 1 - print(' '*(pindent+1) + 'pull j: {} {} {}'.format(lst[start:k+1], left[i:], right[j:])) - else: - lst[k] = left[i] - i += 1 - print(' '*(pindent+1) + 'pull i: {} {} {}'.format(lst[start:k+1], left[i:], right[j:])) - print(' '*pindent + "-- {}".format(lst[start:end+1])) - - -if __name__ == '__main__': - import random as r - x = [int(r.random()*12) for i in range(7)] - print(x) - msort(x, 0, len(x)-1) - print(x) -*/ - -static void mergesort(std::vector<int>& lst, int start, int end) { - if(start == end) return; - int center = start + (end-start)/2; - mergesort(lst, start, center); - mergesort(lst, center+1, end); - std::vector<int> left = std::vector<int>(lst.begin()+start, lst.begin()+(center+1)); - std::vector<int> right = std::vector<int>(lst.begin()+(center+1),lst.begin()+(end+1)); - int i = 0; - int j = 0; - for(int k = start; k < (end+1); k++) { - if (i >= left.size()) { - lst[k] = right[j++]; - } - else if(j >= right.size()) { - lst[k] = left[i++]; - } - else if(left[i] > right[j]) { - lst[k] = right[j++]; - } - else { - lst[k] = left[i++]; - } - } -} - -MergeSorter::MergeSorter() { - this->name = std::string("mergesort"); -} - -MergeSorter::~MergeSorter() { -} - -void MergeSorter::sort(std::vector<int>& list) const { - mergesort(list, 0, list.size()-1); -} |