void merge( vector<int> &v1, int low, int mid, int high ) {
vector<int> v2(L);
int i = low, j = mid + 1, k = low;
while ( i <= mid && j <= high ) {
if ( v1[i] <= v1[j] ) {
v2[k++] = v1[i++];
} else {
v2[k++] = v1[j++];
}
}
while ( i <= mid ) {
v2[k++] = v1[i++];
}
while ( j <= high) {
v2[k++] = v1[j++];
}
for ( int m = low; m <= high; m++) {
v1[m] = v2[m];
}
}
void MergeSort( vector<int> &v, int a, int b) {
if ( a >= b ) return;
int mid = (a + b)/2;
MergeSort(v, a, mid);
MergeSort(v, mid+1, b);
merge(v, a, mid, b);
}
另一种实现:
void merge_sort(
int *A,
int x,
int y,
int *
T ) {
if ( y - x <=
1 )
return;
int m = ( x + y ) /
2;
merge_sort(A, x, m, T);
merge_sort(A, m, y, T);
int p = x, q = m, i =
x;
while( p < m || q <
y ) {
if ( q >= y || ( p < m && A[p] <= A[q])) T[i++] = A[p++
];
else T[i++] = A[q++
];
}
for ( i = x; i < y; i++) A[i] =
T[i];
}
转载于:https://www.cnblogs.com/tsubasa/archive/2012/12/03/2799201.html
相关资源:数据结构—成绩单生成器