標籤: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、堆排序
C++排序-2