想实现一个数组A[]的排序,可以将数组分成两个数组分别排序,有序的两个数组再按一定规则合成一个数组,很容易想到,最终的结果就是得到两个只含一个数字的数组,一定是有序的,那么通过递归,层层回推,得到有序的A[]。
在main函数中通过调用MERGESORT就可以实现数组的由小到大的排序了。
以上运行的结果:
算法的实现需要2个函数:
void MERGE(int* A, int p, int q, int r){
//calculate the largest int
unsigned int a = 0;
int MAX = (~a)/2;
//create 2 new arrays
int L[100];
int K[100];
int i, j, temp;
for(i = 0; i < q-p+1; i++) {
L[i] = A[p+i];
}
L[i] = MAX;
for(i = 0; i < r-q; i++) {
K[i] = A[q+i+1];
}
K[i] = MAX;
i = 0;
j = 0;
for(temp = p; temp <= r; temp++) {
if (L[i] < K[j]) {
A[temp] = L[i];
i++;
} else {
A[temp] = K[j];
j++;
}
}
}
void MERGESORT(int* A, int p, int r){
if (p < r) {
int q = (p+r)/2;
MERGESORT(A, p, q);
MERGESORT(A, q+1, r);
MERGE(A, p, q, r);
}
}
在main函数中通过调用MERGESORT就可以实现数组的由小到大的排序了。
int main () {
int a[4];
a[0] = 10;
a[1] = 5;
a[2] = 6;
a[3] = 4;
MERGESORT(a, 0, 3);
cout << a[0] << endl;
cout << a[1] << endl;
cout << a[2] << endl;
cout << a[3] << endl;
return 0;
}
以上运行的结果: