#include<cmath>
const int maxsize = 100;
class T {
private:
int length = 10;
int data[maxsize];
public:
void MergePass(int h);
void MergeSort2();
void Merge(int first1, int last1,int last2);
void MergeSort(int first,int last);
};
//二路归并
void T::Merge(int first1, int last1, int last2) {
int i = first1, j = last1 + 1,k=first1;
int* temp = new int[length];
while (i <= last1 && j <= last2) {
if (data[i] <= data[j]) {
temp[k++] = data[i++];
}
else {
temp[k++] = data[j++];
}
}
while (i <= last1) {
temp[k++] = data[i++];
}
while (j <= last2) {
temp[k++] = data[j++];
}
for (int i = first1; i <= last2; i++) {
data[i] = temp[i];
}
delete temp;
}
void T::MergeSort(int first, int last) {
if (first == last) {
return;
}
else {
int mid = (first + last) / 2;
MergeSort(first, mid);
MergeSort(mid + 1, last);
Merge(first, mid, last);
}
}
void T::MergePass(int h) {
int i = 0;
while (i + 2 * h < length) {
Merge(i, i + h - 1, i + 2 * h - 1);
i += 2 * h;
}
if (i + h < length) {
Merge(i, i + h - 1, length - 1);
}
}
void T::MergeSort2() {
int h = 1;
while (h < length) {
MergePass(h);
h *= 2;
}
}
二路归并排序模板
最新推荐文章于 2020-05-20 21:55:27 发布