标签:rand ios cto c++ ret algorithm end return 堆排序
4、归并排序
#include <vector> #include <iostream> #include <random> #include <algorithm> using namespace std; void MergeSort(vector<int> &data, vector<int> &cdata, int p, int r); void Merge(vector<int> &data, vector<int> &cdata, int p, int q, int r); void MergeSort(vector<int> &data) { vector<int> cdata(data.size()); MergeSort(data, cdata, 0, data.size() - 1); } void MergeSort(vector<int> &data, vector<int> &cdata, int p, int r) { if (p < r) { int q = (p + r) / 2; MergeSort(data, cdata, p, q); MergeSort(data, cdata, q + 1, r); Merge(data, cdata, p, q, r); } } void Merge(vector<int> &data, vector<int> &cdata, int p, int q, int r) { for (int i = p; i <= r; ++i) cdata[i] = data[i]; int i = p, j = q + 1, k = p; while (i <= q && j <= r) { if (cdata[i] <= cdata[j]) data[k++] = cdata[i++]; else data[k++] = cdata[j++]; } while (i <= q) data[k++] = cdata[i++]; while (j <= r) data[k++] = cdata[j++]; } int main(int argc, char *argv[]) { vector<int> data1 = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 }; vector<int> data2; default_random_engine dre(7); uniform_int_distribution<int> di(-100, 100); for (int i = 0; i < 50; ++i) data2.push_back(di(dre)); MergeSort(data1); for (auto i : data1) cout << i << " "; cout << endl; MergeSort(data2); for (auto i : data2) cout << i << " "; cout << endl; return 0; }
5、堆排序
标签:rand ios cto c++ ret algorithm end return 堆排序
原文地址:http://www.cnblogs.com/sgkind/p/6357752.html