您的位置:首页 > 其它

对数组进行归并排序

2015-09-21 16:36 316 查看
代码如下:

下列的代码有几处trick。第一:在整个算法流程中,我们只分配了一次动态数组。第二,tmpArray在这里起到的作用是临时存储merge的结果,merge之后,需要把tmpArray里面的元素拷贝回arr。3,如果left==right,则我们认为arr已经有序了。

void merge(int arr[], int tmpArray[], int lPos, int rPos, int rightEnd) {
int i, leftEnd, NumElements, tmpPos;
leftEnd = rPos-1;
tmpPos = lPos;
NumElements = rightEnd-lPos+1;
while (lPos<=leftEnd&&rPos<=rightEnd) {
if (arr[lPos]<=arr[rPos]) {
tmpArray[tmpPos++] = arr[lPos++];
} else {
tmpArray[tmpPos++] = arr[rPos++];
}
}
while (lPos<=leftEnd) {
tmpArray[tmpPos++] = arr[lPos++];
}
while (rPos<=rightEnd) {
tmpArray[tmpPos++] = arr[rPos++];
}
for (i=0; i<NumElements; i++, rightEnd--) {
arr[rightEnd] = tmpArray[rightEnd];
}
}
void mSort(int arr[], int tmpArray[], int left, int right) {
int center;
if (left<right) {
center = (left+right)/2;
mSort(arr, tmpArray, left, center);
mSort(arr, tmpArray, center+1, right);
merge(arr, tmpArray, left, center+1, right);
}
}
void mergeSort(int arr[], int n) {
int* tmpArray = new int
;
mSort(arr, tmpArray, 0, n-1);
delete[] tmpArray;
}
int main() {
int arr[10] = {-1, 9, 38, 17, 16, 45, 4, 3, 2, 91};
mergeSort(arr, 10);
for (int i=0; i<10; i++) {
cout << arr[i] << " ";
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: