tips:模板没啥用,不过是为了实践下模板,也可以将数组作为成员变量,模板意义就有点了.
templateclass mergeSort { private: public: mergeSort(); ~mergeSort(); void sort(std::vector &ans); void sort(std::vector &ans, std::vector &temp, int left, int right); void show(std::vector &ans); void merge(std::vector &ans, std::vector &temp, int left, int mid, int right); }; template mergeSort ::mergeSort() { std::cout << "无参构造函数" << std::endl; } template mergeSort ::~mergeSort() { std::cout << "析构函数" << std::endl; } template void mergeSort ::show(std::vector &ans) { for (auto &x : ans) std::cout << x << " "; return; } template void mergeSort ::sort(std::vector &ans) { std::vector temp(ans.size(), 0); sort(ans, temp, 0, ans.size()-1); show(ans); } template void mergeSort ::sort(std::vector &ans, std::vector &temp, int left, int right) { if (left < right) { int mid = left+(right -left) / 2; //tips:与(left+right)/2一样,但是当数据量过于庞大时,left+right会溢出 sort(ans, temp, left, mid); sort(ans, temp, mid + 1, right); merge(ans, temp, left, mid, right); } //return ; } template void mergeSort ::merge(std::vector &ans, std::vector &temp, int left, int mid, int right) { int i = left, j = mid + 1, t = 0; while (i <= mid && j <= right) { if (ans[i] <= ans[j]) temp[t++] = ans[i++]; else temp[t++] = ans[j++]; } while (i <= mid) temp[t++] = ans[i++]; while (j <= right) temp[t++] = ans[j++]; t = 0; while (left <= right) ans[left++] = temp[t++]; } //template



